Path.Combine 使用方法
System.IO.Path.Combine 簡單來說,就是合并兩個路徑字串。
比如如下調用,Path.Combine(@"C:11","aa.txt") 返回的字串路徑如後: C:11aa.txt
這個方法的聲明如下:
public static string Combine ( string path1, string path2 )
樣本 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"));
答案是不一樣的,執行的結果分別是:
2009071611
/20090716/11
d:projects2009071611
為何會這樣呢??
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.
顯然,除了 除了磁碟機開頭的路徑會認為是根, / 或者 開頭的也被認為是根,所以才有上面的計算結果
比如: \myservermysharefoobarbaz.txt 這個路徑中, 我們就可以看到 / 確實有必要作為根路徑
在這裡 / 或者 被等同處理,是因為各個作業系統上確實用的不一樣。如下:
Path.DirectorySeparatorChar 欄位
提供平台特定的字元,該字元用於在反映分層檔案系統組織的路徑字串中分隔目錄層級。
該欄位的值在 Unix 上為斜杠(“/”),在 Windows 和 Macintosh 作業系統上為反斜線(“”)。
Path.AltDirectorySeparatorChar 欄位
提供平台特定的替換字元,該替換字元用於在反映分層檔案系統組織的路徑字串中分隔目錄層級。
該欄位的值在 Unix 上為反斜線(“”),在 Windows 和 Macintosh 作業系統上為斜杠(“/”)。
Path.VolumeSeparatorChar 欄位
提供平台特定的卷分隔字元。
該欄位的值在 Windows 和 Macintosh 上為冒號(“:”),在 Unix 作業系統上為斜杠(“/”)。
參考地址:
http://msdn.microsoft.com/zh-cn/library/fyy7a5kt.aspx
http://blog.joycode.com/ghj/archive/2009/07/27/115665.joy
http://blog.joycode.com/ghj/archive/2006/08/07/79611.joy