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

问题描述 投票:0回答:2

此处所指定,可以在 Windows 上使用绝对路径,而没有

MAX_PATH
长度限制。

但是我注意到以

\\?\
开头的路径在某些旧版本的 Windows 中不起作用。

我需要检测哪个版本(例如使用此处描述的功能之一)以帮助我的软件决定使用

\\?\
路径?

c windows winapi visual-c++ mingw
2个回答
1
投票

如果您在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 版本的函数并在路径前面添加

"\\?\"


0
投票

有趣的是,从 Windows 10 版本 1607 开始,您可以选择全局删除系统中的 MAX_PATH 限制,而无需任何前缀:

https://learn.microsoft.com/de-de/windows/win32/fileio/maximum-file-path-limitation?tabs=registry

© www.soinside.com 2019 - 2024. All rights reserved.