支持使用 \\?\ 前缀的长路径

Support for long paths using \\?\ prefix

按照规定 here 可以在 Windows 上使用绝对路径而没有 MAX_PATH 长度限制。

但是我注意到以 \?\ 开头的路径在某些旧版本的 Windows 中不起作用。

我需要检测哪个版本(例如使用 here 中描述的功能之一)以帮助我的软件决定使用 \?\ 路径?

如果您在 unicode 路径中使用 \?\ 前缀 - 任何版本的 windows(甚至 win2000 和 xp)始终支持长路径。关于支持长路径的问题 - 只影响另一种不以 \?\ 开头的路径类型,例如 c:\*

来自 Maximum Path Length Limitation

The Windows API has many functions that also have Unicode versions to permit an extended-length path for a maximum total path length of 32,767 characters. ... To specify an extended-length path, use the "\?\" prefix. For example, "\?\D:\very long path".

通常在任何单独的函数文档上也直接说明了 \?\ 前缀(如果此 api 支持 - 文件 I/O 函数始终支持此前缀,当 shell api - 从不)

例如来自 GetFileAttributesW

To extend this limit to 32,767 wide characters, call the Unicode version of the function (GetFileAttributesW), and prepend "\?\" to the path.

CreateFileW 等相同..

To extend this limit to 32,767 wide characters, use this Unicode version of the function and prepend "\?\" to the path.