【发布时间】:2022-01-22 02:33:06
【问题描述】:
根据here 的规定,可以在Windows 上使用绝对路径而没有MAX_PATH 长度限制。
但是我注意到以 \\?\ 开头的路径在某些旧版本的 Windows 中不起作用。
我需要检测哪个版本(例如,使用here 描述的功能之一)来帮助我的软件决定使用\\?\ 路径?
【问题讨论】:
-
这能回答你的问题吗? How to programmatically check if the current process is long path aware on Windows?。可能与 this 一起使用,它表示它是 Windows 10、1607(链接的问答也是如此)。
-
`\\?\` 前缀仅在调用 Unicode API 时启用长路径支持。据我所知,这已经存在了几十年。你在调用 Unicode API 吗?
-
另外,检测 Windows 版本不是编写功能自适应代码的方式。只需调用 API 并响应报告的错误(如果有)。
-
如果您使用名称以 \\?\ 开头的
CreateFileW- 始终支持长路径。在任何版本的 Windows 中。即使在 xp 或 2000 中。所以你甚至不需要检查任何东西。当然如果使用本机 api(即 NtOpenFile) - 当然总是支持并且也可能使用相对名称 -
如果考虑性能,为什么要使用非Unicode API?所做的只是在两个方向上增加编码开销。这听起来还没有定论,
标签: c windows winapi visual-c++ mingw