Path.Combine 的計算結果

iDotNetSpace發表於2009-10-13

Path.Combine("d:\\projects", "\\20090716\\11")); 的計算結果

下面程式碼執行的結果一樣麼?

Console.WriteLine(Path.Combine("d:\\projects", "\\20090716\\11"));
Console.WriteLine(Path.Combine("d:\\projects", "/20090716/11")); Console.WriteLine(Path.Combine("d:\\projects", "20090716\\11"));

答案是不一樣的,執行的結果分別是:

\20090716\11
/20090716/11
d:\projects\20090716\11

為何會這樣呢??

MSDN 中文上的解釋如下,紅色字型是導致這個問題的根本原因:

如果 path2 不包括根(例如,如果 path2 沒有以分隔符或驅動器規格起始),則結果是兩個路徑的串聯,具有介於其間的分隔符。如果 path2 包括根,則返回 path2。

MSDN 英文的解釋如下:

If path2 does not include a root (for example, if path2 does not start with a separator character or a drive specification), the result is a concatenation of the two paths, with an intervening separator character. If path2 includes a root, path2 is returned.

顯然,除了 除了驅動器開頭的路徑會認為是根, / 或者 \ 開頭的也被認為是根,所以才有上面的計算結果

比如: \\myserver\myshare\foo\bar\baz.txt  這個路徑中, 我們就可以看到 / 確實有必要作為根路徑

在這裡 / 或者 \ 被等同處理,是因為各個作業系統上確實用的不一樣。如下:

Path.DirectorySeparatorChar 欄位 
提供平臺特定的字元,該字元用於在反映分層檔案系統組織的路徑字串中分隔目錄級別。
該欄位的值在 Unix 上為斜槓(“/”),在 Windows 和 Macintosh 作業系統上為反斜槓(“\”)。

Path.AltDirectorySeparatorChar 欄位
提供平臺特定的替換字元,該替換字元用於在反映分層檔案系統組織的路徑字串中分隔目錄級別。
該欄位的值在 Unix 上為反斜槓(“\”),在 Windows 和 Macintosh 作業系統上為斜槓(“/”)。

Path.VolumeSeparatorChar 欄位
提供平臺特定的卷分隔符。
該欄位的值在 Windows 和 Macintosh 上為冒號(“:”),在 Unix 作業系統上為斜槓(“/”)。

參考資料:

Path.Combine 方法
http://msdn.microsoft.com/zh-cn/library/fyy7a5kt.aspx

http://msdn.microsoft.com/en-us/library/fyy7a5kt.aspx

 

Path.Combine (合併兩個路徑字串)方法的一些使用細節
http://blog.joycode.com/ghj/archive/2006/08/07/79611.joy

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-616449/,如需轉載,請註明出處,否則將追究法律責任。

相關文章