3

我刚刚在 MSDN 上偶然发现了这篇文章,它说路径可以是 259 个字符 + NUL 终止,但如果你在它前面加上“\\?\”,WinAPI 允许你使用

最大总路径长度为 32,767 个字符。

渴望看到它工作我尝试使用资源管理器中的前缀(在 XP SP3 上),但它根本不起作用(在任何路径上)。如果你放在\\?\C:\Path\to\an\existing.file资源管理器的栏上,它会给出“找不到文件”的错误。

所以我很困惑。我可以为(非古代)Windows 编写一些代码,充分利用 NTFS 上提到的路径大小吗?为什么资源管理器不使用它?

4

3 回答 3

2

有一组 API 调用适用于扩展路径,有些则不适用。MSDN 通常会提到这一点。

并不是说如果你只是在 Windows Explorer 下键入该路径,这是行不通的,因为扩展路径语法只是 WIn32 API 的转义序列,而不是 Windows 资源管理器。现在,在 Win7 中这确实有效,因为很多人都希望它有效。

同样对于长路径,如果您更改工作目录或以子目录作为根目录打开资源管理器,它确实会有所帮助。

于 2010-08-28T19:25:43.123 回答
1

在有人告诉我 RTFM 之前...

请注意,这些示例旨在与 Windows API 函数一起使用,并不一定都适用于 Windows shell 应用程序,例如 Windows 资源管理器。
[...]
对于文件 I/O,路径字符串的“\\?\”前缀告诉 Windows API 禁用所有字符串解析并将紧随其后的字符串直接发送到文件系统。例如,如果文件系统支持大路径和文件名,则您可以超过由 Windows API 强制执行的 MAX_PATH 限制。

另一方面,这让我想知道通过使用非法文件名从资源管理器中隐藏文件(或查找此类文件)的可能性。

于 2010-08-28T18:19:59.427 回答
0

您是在问为什么 Windows 中的所有组件都不支持它,还是在问使用这些长路径是否合法?

您绝对可以安全地使用它们,但您可能会激怒想要使用 Explorer 之类的工具来浏览它们的人。我们在野外经常看到这样的路径。有时,当人们无法使用 MY_FAVORITE_TOOL 删除它时,他们会感到非常惊讶......

于 2010-08-29T00:58:34.070 回答