最大路徑長度限制

在 Windows API (中,下列段落) 討論的一些例外狀況,路徑的最大長度是 MAX_PATH,定義為 260 個字元。 本機路徑的結構化順序如下:磁碟機號、冒號、反斜線、以反斜線分隔的名稱元件,以及終止的 Null 字元。 例如,磁片磁碟機 D 上的最大路徑是 「D:\some 256-character string< NUL」,其中 「 < NUL >> 」 代表目前系統字碼頁的不可見終止 Null 字元。 (字元 <> 會用於視覺清楚,而且不能是有效路徑字串的一部分。)

例如,如果您要將具有長檔名的 Git 存放庫複製到本身具有長名稱的資料夾,可能會達到此限制。

注意

Windows API 中的檔案 I/O 函式會將 「/」 轉換為 「\」 作為將名稱轉換成 NT 樣式名稱的一部分,但使用 「\\?\」 前置詞時,如下列各節所述。

Windows API 有許多函式也具有 Unicode 版本,可允許延伸長度路徑,最大路徑長度為 32,767 個字元。 這種類型的路徑是由反斜線分隔的元件所組成,每個元件最多都是在 GetVolumeInformation函式的 lpMaximumComponentLength參數中傳回的值, (此值通常是 255 個字元) 。 若要指定擴充長度的路徑,請使用 「\\?\」 前置詞。 例如,「\\?\D:\long path」。

注意

32,767 個字元的最大路徑是近似的,因為系統在執行時間可能會將 「\\?\」 前置詞擴充為較長的字串,而且此擴充會套用至總長度。

「\\?\」 前置詞也可以與根據通用命名慣例建構的路徑搭配使用, (UNC) 。 若要使用 UNC 指定這類路徑,請使用 「\\?\UNC\」 前置詞。 例如,「\\?\UNC\server\share」,其中 「server」 是電腦的名稱,而 「share」 是共用資料夾的名稱。 這些前置詞不會當做路徑本身的一部分使用。 它們表示路徑應該以最少的修改傳遞至系統,這表示您無法使用正斜線來代表路徑分隔符號,或是表示目前目錄的句點,或是使用雙點來代表父目錄。 因為您無法搭配相對路徑使用 「\\?\」 前置詞,所以相對路徑一律限制為 總MAX_PATH 個字元。

不需要對路徑和檔案名字串執行任何 Unicode 正規化,以供 Windows 檔案 I/O API 函式使用,因為檔案系統會將路徑和檔案名視為 WCHARs 的不透明序列。 您的應用程式需要的任何正規化都應該考慮到這點,這是對相關 Windows 檔案 I/O API 函式的任何呼叫外部。

使用 API 建立目錄時,指定的路徑不能太長,您無法附加 8.3 檔案名 (也就是說,目錄名稱不能超過 MAX_PATH 減 12) 。

殼層和檔案系統有不同的需求。 可以使用 Windows API 建立路徑,讓殼層使用者介面無法正確解譯。

在 Windows 10、版本 1607 和更新版本中啟用長路徑

從 Windows 10 1607 版開始,已從一般 Win32 檔案和目錄函式中移除MAX_PATH限制。 不過,您必須加入宣告新的行為。

若要啟用新的長路徑行為,必須符合下列兩個條件:

  • 登錄機碼 Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled (Type: REG_DWORD) 必須存在且設定為 1。 在第一次呼叫受影響的 Win32 檔案或目錄函式之後,系統會在每個進程) ( (快取索引鍵的值, (請參閱下方的函式清單) 。 登錄機碼不會在進程的存留期間重載。 為了讓系統上的所有應用程式辨識金鑰的值,可能需要重新開機,因為某些程式可能會在設定金鑰之前啟動。

您也可以將此程式碼 .reg 複製到可為您設定此設定的檔案,或使用具有更高許可權的終端機視窗中的 PowerShell 命令:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"LongPathsEnabled"=dword:00000001

注意

此登錄機碼也可以透過位於 Computer Configuration > Administrative Templates > System > Filesystem > Enable Win32 long paths 群組原則 來控制。

  • 應用程式資訊清單也必須包含 longPathAware 元素。

    <application xmlns="urn:schemas-microsoft-com:asm.v3">
        <windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
            <ws2:longPathAware>true</ws2:longPathAware>
        </windowsSettings>
    </application>
    

如果您加入宣告長路徑行為,這些目錄管理功能不再有 MAX_PATH 限制:CreateDirectoryW、CreateDirectoryExW GetCurrentDirectoryW RemoveDirectoryW SetCurrentDirectoryW。

如果您加入宣告長路徑行為,這些檔案管理功能不再有 MAX_PATH 限制:CopyFileW、CopyFile2、CopyFileExW、CreateFileW、CreateFile2、CreateHardLinkW、CreateSymbolicLinkW、DeleteFileW、 FindFirstFileW、FindFirstFileExW、FindNextFileW、GetFileAttributesW、GetFileAttributesExW、SetFileAttributesW、GetFullPathNameW、GetLongPathNameW、MoveFileW、MoveFileExW、MoveFileWithProgressW、ReplaceFileW、SearchPathW、FindFirstFileNameW、FindNextFileNameW、FindFirstStreamW、FindNextStreamW、GetCompressedFileSizeW、GetFinalPathNameByHandleW。