GetFullPathName能处理长度超过MAX_PATH的相对路径吗?

6
GetFullPathName() 的文档说,为了使用超过 MAX_PATH(260 个字符)的路径,我需要在文件命名空间前缀中加上:\\?\。然而,有关文件名的常规文档 表明,这个前缀不能与相对路径一起使用,因此相对路径的长度总是限制在 260 个字符以内。这是否意味着没有办法使用 GetFullPathName() 处理超过 MAX_PATH 的相对路径?(如果是这样,那么我的理解是该函数实际上不支持长路径,除非传递的路径已经是完整的路径。)

http://arsenmk.blogspot.com.au/2015/12/handling-long-paths-on-windows.html声称`GetFullPathNameW`支持长路径,即使没有“\\?\”前缀。 - Cauterite
1个回答

8
同意,这是没有意义的。本地API没有相对路径的概念,它是一个纯WinAPI层特性。可以将其解释为获取函数返回本地路径名的方法。但我检查了一下,它并不是这样的,看起来是一个复制/粘贴文档错误。
当你需要GetFullPathName()时,请务必注意目标,因为GetCurrentDirectory()已经受到MAX_PATH限制。所以长路径支持已经不存在了。
通用建议是永远不要依赖相对路径,即使您不关心长路径支持。太多的事故。唯一合理的选择是,如果要编写一个预计从命令行驱动的简单控制台模式应用程序,则无需考虑。然后您不会在意,因为命令行解释器受到MAX_PATH的限制。

SetCurrentDirectory 的文档声称,如果你在路径前面加上 "\?",那么 SetCurrentDirectoryW 就支持长路径。这也是一个错误吗? - Cauterite

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接