2011-08-03 173 views
12

我有以下命令:爲什麼這個Path.Combine不能工作?

string reportedContentFolderPath = 
Path.Combine(contentFolder.FullName.ToString(), @"\ReportedContent\"); 

當我看到在調試器,我可以看到以下內容:

contentFolder.FullName = "E:\\" 

然而

reportedContentFolderPath = "\\ReportedContent\\" 

爲什麼Path.Combine斬去對E :\?

+2

嘗試不用''reportedContentFolderPath'上的斜槓 – Mrchief

+1

CHeck out this previous answer http://stackoverflow.com/questions/53102/why-does-path-combine-not-properly-concatenate-filenames-that-start-與路徑-DIR –

回答

27

你在@"\ReportedContent\"上有一個斜槓。你不希望出現這種情況(或後一個,我懷疑) - 嘗試只:

string reportedContentFolderPath = 
    Path.Combine(contentFolder.FullName.ToString(), "ReportedContent"); 

the documentation

如果path2不包括根目錄(例如,如果path2不以分隔符或驅動器規範開始),結果是兩個路徑的串聯,並帶有中間分隔符。如果path2包含一個根,則返回path2

在你的情況,path2包含一個根,所以它不看path1返回。

6

如果以分隔字符開頭(\),Path.Combine將返回第二個參數。

3

我敢打賭,通過在第二個字符串中指定斜槓作爲前綴,Combine方法假定當前驅動器。嘗試刪除斜槓。

7

據的方法的文檔中說明:

如果PATH2不包括根目錄(例如,如果PATH2不與分隔符或驅動器規範開始),其結果是一個級聯這兩條路徑具有中間分隔符。如果path2包含一個根,則返回path2。

我建議你閱讀這一切,瞭解所有可能的組合是如何工作的:Path.Combine Method

1

它看起來像Path.Combine認爲兩條斜線E:\\指UNC路徑,UNC路徑不應該以驅動器號爲前綴。將contentFolder更改爲E:\,它應該可以工作。

1

MSDN從(重點煤礦):

public static string Combine(string path1, string path2) 

[...]

返回值

類型:System.String 將合併的路徑。如果其中一個指定路徑是零長度字符串,則此方法返回另一個路徑。如果path2包含絕對路徑,則此方法返回path2

@"\ReportedContent\"是絕對路徑,因爲它以反斜槓開始。