我在日志中找到了一个文件的引用,其格式如下:
\\?\C:\Path\path\file.log
我无法找到关于 \?\ 序列的参考文献。我相信反斜杠之间的部分是指主机名。
例如,在我的Windows计算机上,以下内容可以正常工作:
dir \\?\C:\
同时,具有相同的结果也是可以的:
dir \\.\C:\
问题:
- 在这个特定的路径格式中,问号表示什么有参考资料吗?
- 可能会生成这种格式的文件路径的原因是什么?
Windows API解析文件I/O的输入字符串,除了其他操作外,它还会将/
转换为\
作为将文件名转换为NT样式名称的一部分,或者解释.
和..
伪目录之一。除少数例外,Windows API还将路径名限制为260个字符。
文档中描述的\\?\
前缀的目的是:
对于文件I/O,“\\?\”前缀告诉Windows APIs禁用所有字符串解析,并将后面的字符串直接发送到文件系统。
除了其他操作外,这允许在路径名中使用原本被保留的符号(如.
或..
)。退出任何翻译,系统不再需要维护内部缓冲区,并且可以取消260个字符的任意限制(只要底层文件系统支持它)。请注意,这不是\\?\
前缀的目的,而是一个推论,即使前缀主要用于其推论。
MAX_PATH
字符的路径”的理由是什么。为什么我传递一个长度超过MAX_PATH
字符的路径并不足够说明呢?我可能需要在SO上发布这个问题…… - Michael BurrMAX_PATH
字符的路径,除非路径有特殊前缀 - 我只是想知道为什么他们不直接修复API以允许没有前缀的更长路径。我认为这与API的ANSI版本需要优化如何处理缓冲区以进行Unicode转换有关,但我不太记得了。这似乎很不必要。 - Michael Burr