\\?\意味着什么在文件路径前面

时间:2014-01-17 19:44:40

标签: windows filepath

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

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

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

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

dir \\?\C:\

并且,同样的结果也很好:

dir \\.\C:\

问题:

  1. 是否提及问号在此特定路径格式中的含义?
  2. 什么可能以这种格式生成文件路径?

2 个答案:

答案 0 :(得分:47)

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

提取:

  

Windows API具有许多也具有Unicode版本的函数   允许一个扩展长度的路径,最大总路径长度为   32,767个字符。这种类型的路径由组件组成   用反斜杠分隔,每个都取决于返回的值   lpMaximumComponentLength的{​​{1}}参数   function(此值通常为255个字符)。指定一个   扩展长度路径,使用GetVolumeInformation前缀。例如,"\\?\"

  

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

答案 1 :(得分:5)

Windows API解析文件I / O的输入字符串。除其他外,它将/转换为\,作为将名称转换为NT样式名称或解释...伪目录的一部分。除了少数例外,Windows API还将路径名限制为260个字符。

\\?\前缀的documented目的是:

  

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

如果基础文件系统支持长路径和文件名,则允许在路径名中使用...,以及放宽260字符路径名限制。