什么是 \?\ 放在文件路径前面时是什么意思

问题描述 投票:0回答:2

我在具有以下格式的日志中找到对文件的引用:

\\?\C:\Path\path\file.log

我找不到对 \?\ 序列含义的引用。我相信反斜杠之间的部分是指主机名。

例如,在我的 Windows 计算机上,以下工作正常:

dir \\?\C:\

还有,同样的结果就好了:

dir \\.\C:\

问题:

  1. 在这个特定的路径格式中是否有对问号的含义的引用?
  2. 什么可能会生成这种格式的文件路径?
windows filepath
2个回答
82
投票

长篇大论,但如果您在这个域中,则值得一读:http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx

摘录:

Windows API 有许多函数也有 Unicode 版本 允许延长路径的最大总路径长度为 32,767 个字符。这种类型的路径由组件组成 用反斜杠分隔,每个都达到在

lpMaximumComponentLength
参数
GetVolumeInformation
函数(此值通常为 255 个字符)。指定一个 加长路径,使用
"\\?\"
前缀。例如,
"\\?\D:\very long path"
.

和:

"\\?\"
前缀也可以与根据构建的路径一起使用 通用命名约定 (UNC)。使用指定这样的路径 UNC,使用
"\\?\UNC\"
前缀。例如,
"\\?\UNC\server\share"
, 其中
"server"
是计算机的名称,
"share"
是计算机的名称 共享文件夹。这些前缀不用作路径的一部分 本身。它们表明应该将路径传递给系统 进行最少的修改,这意味着您不能使用 forward 斜杠代表路径分隔符,或句点代表 当前目录,或双点表示父目录。 因为你不能在相对路径中使用
"\\?\"
前缀, 相对路径总是限制在总共
MAX_PATH
个字符。


19
投票

Windows API 解析文件 I/O 的输入字符串。除其他事项外,它将

/
转换为
\
作为将名称转换为 NT 样式名称或解释
.
..
伪目录的一部分。除了少数例外,Windows API 还将路径名限制为 260 个字符。

\\?\前缀的

记录
目的是:

对于文件 I/O,路径字符串的“\?\”前缀告诉 Windows API 禁用所有字符串解析并将其后的字符串直接发送到文件系统。

除其他外,这允许在路径名中使用其他保留符号(例如

.
..
)。选择退出任何翻译,系统不再需要维护内部缓冲区,并且也可以解除 260 个字符的任意限制(只要底层文件系统支持)。请注意,这不是
\\?\
前缀的目的,而不是推论,即使前缀主要用于其推论。

© www.soinside.com 2019 - 2024. All rights reserved.