System.IO 命名空間中很多類型的成員都包括 path 參數,讓你可以指定指向某個文件系統資源的絕對路徑或相對路徑。 此路徑隨後會傳遞至 Windows 文件系統 API。 本主題討論可在 Windows 系統上使用的文件路徑格式。 傳統 DOS 路徑 標準的 DOS 路徑可由以下三部分組成: ...
System.IO 命名空間中很多類型的成員都包括 path
參數,讓你可以指定指向某個文件系統資源的絕對路徑或相對路徑。 此路徑隨後會傳遞至 Windows 文件系統 API。 本主題討論可在 Windows 系統上使用的文件路徑格式。
傳統 DOS 路徑
標準的 DOS 路徑可由以下三部分組成:
如果以上三項都存在,則為絕對路徑。 如未指定捲號或驅動器號,且目錄名稱的開頭是目錄分隔符,則路徑屬於當前驅動器根路徑上的相對路徑。 否則路徑相對於當前目錄。 下表顯示了一些可能出現的目錄和文件路徑。
路徑 | 描述 |
---|---|
C:\Documents\Newsletters\Summer2018.pdf |
C: 盤根路徑上的絕對文件路徑。 |
\Program Files\Custom Utilities\StringFinder.exe |
當前驅動器根路徑上的絕對路徑。 |
2018\January.xlsx |
指向當前目錄的子目錄中的文件的相對路徑。 |
..\Publications\TravelBrochure.pdf |
指向當前目錄的同級目錄中的文件的相對路徑。 |
C:\Projects\apilibrary\apilibrary.sln |
指向 C: 盤根路徑中的文件的絕對路徑。 |
C:Projects\apilibrary\apilibrary.sln |
C: 盤當前目錄上的相對路徑。 |
重要
請註意最後兩個路徑之間的差異。 兩者都指定了可選的捲說明符(均為“C:”),但前者以所指定捲的根開頭,而後者不是。 結果,前者表示 C: 盤根目錄上的絕對路徑,而後者表示 C: 盤當前目錄上的相對路徑。 應使用前者時使用了後者是涉及 Windows 文件路徑的 bug 的常見原因。
UNC 路徑
通用命名約定 (UNC) 路徑,用於訪問網路資源,具有以下格式:
- 一個以 \\ 開頭的伺服器名或主機名。 伺服器名稱可以為 NetBIOS 電腦名稱或者 IP/FQDN 地址(支持 IPv4 和 IPv6)。
- 共用名,使用 \ 將其與主機名分隔開。 伺服器名和共用名共同組成了捲。
- 目錄名稱。 目錄分隔符用來分隔嵌套目錄層次結構中的子目錄。
- 可選的文件名。 目錄分隔符用來分隔文件路徑和文件名。
以下是一些 UNC 路徑的示例:
路徑 | 描述 |
---|---|
\\system07\C$\ |
system07 上 C: 盤的根目錄。 |
\\Server2\Share\Test\Foo.txt |
\\Server2\Share 捲的測試目錄中的 Foo.txt 文件。 |
UNC 路徑必須始終是完全限定的。 它們可以包括相對目錄段(.
和 ..
),但是這些目錄段必須是完全限定的路徑的一部分。 只能通過將 UNC 路徑映射至驅動器號來使用相對路徑。
DOS 設備路徑
Windows 操作系統有一個指向所有資源(包括文件)的統一對象模型。 可從控制台視窗訪問這些對象路徑;並通過舊版 DOS 和 UNC 路徑映射到的符號鏈接的特殊文件,將這些對象路徑公開至 Win32 層。 此特殊文件夾可通過 DOS 設備路徑語法(以下任一)進行訪問:
\\.\C:\Test\Foo.txt
\\?\C:\Test\Foo.txt
備註
從 NET Core 1.1 和 .NET Framework 4.6.2 開始,運行在 Windows 上的 .NET 實現支持 DOS 設備路徑語法。
DOS 設備路徑由以下部分組成:
-
設備路徑說明符(
\\.\
或\\?\
),它將路徑標識為 DOS 設備路徑。備註
.NET Core 的所有版本以及從 4.6.2 開始的 .NET Framework 版本都支持
\\?\
。 -
指向“真正”設備對象(這裡是 C:)的符號鏈接。
設備路徑說明符後的第一個 DOS 設備路徑段標識了捲或驅動器。 (例如,
\\?\C:\
和\\.\BootPartition\
。)UNC 有個特定的鏈接,很自然地名為
UNC
。 例如:\\.\UNC\Server\Share\Test\Foo.txt
\\?\UNC\Server\Share\Test\Foo.txt
對於設備 UNC,伺服器/共用部分構成了捲。 例如,在
\\?\server1\e:\utilities\\filecomparer\
中,伺服器/共用部分是 server1\utilities。 使用相對目錄段調用 Path.GetFullPath(String, String) 等方法時,這一點非常重要;決不可能越過捲。
DOS 設備路徑通過定義進行完全限定。 不允許使用相對目錄段(.
和 ..
)。 也不會包含當前目錄。