我在具有以下格式的日志中找到对文件的引用:
\\?\C:\Path\path\file.log
我找不到对 \?\ 序列含义的引用。我相信反斜杠之间的部分是指主机名。
例如,在我的 Windows 计算机上,以下工作正常:
dir \\?\C:\
还有,同样的结果就好了:
dir \\.\C:\
问题:
长篇大论,但如果您在这个域中,则值得一读:http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx
摘录:
Windows API 有许多函数也有 Unicode 版本 允许延长路径的最大总路径长度为 32,767 个字符。这种类型的路径由组件组成 用反斜杠分隔,每个都达到在
参数lpMaximumComponentLength
函数(此值通常为 255 个字符)。指定一个 加长路径,使用GetVolumeInformation
前缀。例如,"\\?\"
."\\?\D:\very long path"
和:
前缀也可以与根据构建的路径一起使用 通用命名约定 (UNC)。使用指定这样的路径 UNC,使用"\\?\"
前缀。例如,"\\?\UNC\"
, 其中"\\?\UNC\server\share"
是计算机的名称,"server"
是计算机的名称 共享文件夹。这些前缀不用作路径的一部分 本身。它们表明应该将路径传递给系统 进行最少的修改,这意味着您不能使用 forward 斜杠代表路径分隔符,或句点代表 当前目录,或双点表示父目录。 因为你不能在相对路径中使用"share"
前缀, 相对路径总是限制在总共"\\?\"
个字符。MAX_PATH
Windows API 解析文件 I/O 的输入字符串。除其他事项外,它将
/
转换为 \
作为将名称转换为 NT 样式名称或解释 .
和 ..
伪目录的一部分。除了少数例外,Windows API 还将路径名限制为 260 个字符。
\\?\
前缀的
记录目的是:
对于文件 I/O,路径字符串的“\?\”前缀告诉 Windows API 禁用所有字符串解析并将其后的字符串直接发送到文件系统。
除其他外,这允许在路径名中使用其他保留符号(例如
.
或 ..
)。选择退出任何翻译,系统不再需要维护内部缓冲区,并且也可以解除 260 个字符的任意限制(只要底层文件系统支持)。请注意,这不是\\?\
前缀的目的,而不是推论,即使前缀主要用于其推论。