System.IO.Path.Combine 簡單來說,就是合並兩個路徑字符串。 比如如下調用,Path.Combine(@"C:\11","aa.txt") 返回的字符串路徑如后: C:\11\aa.txt
這個方法的聲明如下: public static string Combine ( string path1, string path2 )
我們在合並一些目錄的時候,它的兩個參數有些特殊限制,下面我們就來依次看這些特殊限制
1、如果其中一個參數為 null ,會拋出異常: An unhandled exception of type 'System.ArgumentNullException' occurred in mscorlib.dll Additional information: Value cannot be null.
2、如果指定的路徑之一是零長度字符串,則該方法返回其他路徑。當然,兩個都是零長度字符串,則返回的就是 string.Empty ;
3、如果 path2 包含絕對路徑,則該方法返回 path2。 比如:string tmp = Path.Combine(@"C:\11", @"D:\aa.txt"); tmp 就等於 @"D:\aa.txt"
4、 path2 不能以 \ 和 / 開頭的字符串, 如果是這個字符串開頭的,則返回 path2 。 比如以下代碼: string p1 = "C:\\aa\\"; string p2 = "C:\\aa";
string p12 = "\\p12"; string p13 = "\\p13\\"; string p15 = "/p13/";
Console.WriteLine(Path.Combine(p1, p12)); Console.WriteLine(Path.Combine(p1, p13)); Console.WriteLine(Path.Combine(p1, p15)); Console.WriteLine(Path.Combine(p2, p12)); Console.WriteLine(Path.Combine(p2, p13)); Console.WriteLine(Path.Combine(p2, p15)); 依次顯示的是: \p12 \p13\ /p13/ \p12 \p13\ /p13/
該函數工作原理
如果 path1 不是一個驅動器引用(即不是"C:"或"D:")而且不是以 DirectorySeparatorChar、AltDirectorySeparatorChar 或 VolumeSeparatorChar 中定義的有效分隔符結束,則在串聯前將 DirectorySeparatorChar 追加到 path1 中。
如果 path2 不包括根(例如,如果 path2 沒有以分隔符或驅動器規格起始),則結果是兩個路徑的串聯,具有介於其間的分隔符。如果 path2 包括根,則返回 path2。
由於有空白時不進行參數分析,如果 path2 為" c:\\ ",則將其追加到 path1,而不是僅返回 path2。
不是目錄和文件名的所有無效字符都被 Combine 方法解釋為不可接受的,因為您可以將這些字符用於搜索通配符。例如,盡管 Path.Combine("c:\\", "*.txt") 可能是無效的(如果您要根據它創建一個文件),但它作為搜索字符串是有效的。因此 Combine 方法成功解釋它。
Path.DirectorySeparatorChar 字段 提供平台特定的字符,該字符用於在反映分層文件系統組織的路徑字符串中分隔目錄級別。 該字段的值在 Unix 上為斜杠("/"),在 Windows 和 Macintosh 操作系統上為反斜杠("\")。
Path.AltDirectorySeparatorChar 字段 提供平台特定的替換字符,該替換字符用於在反映分層文件系統組織的路徑字符串中分隔目錄級別。 該字段的值在 Unix 上為反斜杠("\"),在 Windows 和 Macintosh 操作系統上為斜杠("/")。
Path.VolumeSeparatorChar 字段 提供平台特定的卷分隔符。 該字段的值在 Windows 和 Macintosh 上為冒號(":"),在 Unix 操作系統上為斜杠("/")。