最大路径长度限制

在 Windows API (,以下段落) 中讨论的一些例外,路径的最大长度为 MAX_PATH,定义为 260 个字符。 本地路径按以下顺序进行结构化:驱动器号、冒号、反斜杠、用反斜杠分隔的名称组件,以及终止 null 字符。 例如,驱动器 D 上的最大路径为“D:\some 256 字符路径字符串<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 个字符。

无需对 Windows 文件 I/O API 函数使用的路径和文件名字符串执行任何 Unicode 规范化,因为文件系统将路径和文件名视为 WCHAR的不透明序列。 应用程序需要的任何规范化都应考虑到这一点,这是对相关 Windows 文件 I/O API 函数的任何调用的外部。

使用 API 创建目录时,指定的路径不能太长,无法追加 8.3 文件名 (,即目录名称不能超过 MAX_PATH 减 12) 。

shell 和文件系统有不同的要求。 可以使用 Shell 用户界面无法正确解释的 Windows API 创建路径。

在 Windows 10 版本 1607 及更高版本中启用长路径

从 Windows 10 版本 1607 开始,MAX_PATH限制已从常见的 Win32 文件和目录函数中删除。 但是,必须选择加入新行为。

若要启用新的长路径行为,必须满足以下两个条件:

  • 注册表项 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

注意

还可以通过组策略 at 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、CreateFile2、CreateHardLinkW、CreateSymbolicLinkW、DeleteFileW、 FindFirstFileW、FindFirstFileExW、FindNextFileW、GetFileAttributesW、GetFileAttributesExW、SetFileAttributesW、GetFullPathNameW、GetLongPathNameW、MoveFileExW、MoveFileExW、MoveFileWithProgressW、ReplaceFileW、SearchPathW、FindFirstFileNameW、FindNextFileNameW、FindFirstStreamW、FindNextStreamW、GetCompressedFileSizeW、GetFinalPathNameByHandleW。