c-使用\\?\支持长路径前缀



根据此处的指定,可以在没有MAX_PATH长度限制的情况下在Windows上使用绝对路径。

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

我需要检测哪个版本(例如,使用此处描述的功能之一(来帮助我的软件决定使用\?路径?

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

来自最大路径长度限制

Windows API有许多函数也有Unicode版本,允许使用扩展长度路径,最大总路径长度为32767个字符。。。要指定延长路径,请使用"\?"前缀。例如,"\?D:very long path"

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

例如来自GetFileAttributesW

若要将此限制扩展到32767个宽字符,请调用函数的Unicode版本(GetFileAttributesW(,并将"\?"前置为路径

CreateFileW上相同,依此类推。

若要将此限制扩展到32767个宽字符,请使用此Unicode版本的函数并在路径前加上"\?"

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

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

最新更新