如此处所指定,可以在 Windows 上使用绝对路径,而没有
MAX_PATH
长度限制。
但是我注意到以
\\?\
开头的路径在某些旧版本的 Windows 中不起作用。
我需要检测哪个版本(例如使用此处描述的功能之一)以帮助我的软件决定使用
\\?\
路径?
如果您在unicode路径中使用
\\?\
前缀 - 任何版本的Windows(甚至win2000和xp)都始终支持长路径。关于支持长路径的问题 - 只影响其他不以 \\?\
开头的路径类型,例如 c:\*
来自 最大路径长度限制
Windows API 有许多函数,这些函数也有 Unicode 版本,以允许扩展长度路径,最大总路径长度为 32,767 个字符。 ...要指定扩展长度路径,请使用
前缀。例如,"\\?\"
。"\\?\D:\very long path"
通常在任何单独的函数文档中也直接说明
\\?\
前缀(如果此 api 支持 - 文件 I/O 函数始终支持此前缀,而 shell api - 从不支持)
GetFileAttributesW
要将此限制扩展到 32,767 个宽字符,请调用该函数的 Unicode 版本 (GetFileAttributesW),并在前面添加
路径。"\\?\"
CreateFileW
等等..
要将此限制扩展到 32,767 个宽字符,请使用此 Unicode 版本的函数并在路径前面添加
。"\\?\"
有趣的是,从 Windows 10 版本 1607 开始,您可以选择全局删除系统中的 MAX_PATH 限制,而无需任何前缀:
https://learn.microsoft.com/de-de/windows/win32/fileio/maximum-file-path-limitation?tabs=registry