我记得听到有人提到有关取消引用路径的事情,但没有解释取消引用,而且我不知道它是什么。
答案1
这是什么\\?\c:\
意思?
第一部分\\?\
称为扩展长度路径前缀。它用于绕过 Windows API 在最大路径长度方面的限制:
对于文件 I/O,路径字符串的“\\?\”前缀告诉 Windows API 禁用所有字符串解析并将其后面的字符串直接发送到文件系统。
例如,如果文件系统支持大路径和文件名,则可以超出 Windows API 强制执行的 MAX_PATH 限制。
第二部分c:\
是对驱动器 c: 根路径的引用。
最大路径长度限制
在 Windows API 中(以下段落中讨论的一些例外),路径的最大长度为 MAX_PATH,定义为 260 个字符。
...
Windows API 中有许多函数也有 Unicode 版本,允许扩展路径长度,最大路径总长度为 32,767 个字符。此类路径由反斜杠分隔的组件组成,每个组件的长度不超过
lpMaximumComponentLength
函数参数中返回的值GetVolumeInformation
(该值通常为 255 个字符)。
要指定扩展长度的路径,请使用“\\?\”前缀。例如,“\\?\D:\very long path”。
注意:最大路径长度 32,767 个字符是近似值,因为系统在运行时可能会将“\\?\”前缀扩展为更长的字符串,并且此扩展适用于总长度。
“\\?\”前缀也可以用于根据通用命名约定 (UNC) 构造的路径。要使用 UNC 指定这样的路径,请使用“\\?\UNC\”前缀。例如,“\\?\UNC\server\share”,其中“server”是计算机的名称,“share”是共享文件夹的名称。这些前缀不用作路径本身的一部分。它们表示路径应以最小的修改传递给系统,这意味着您不能使用正斜杠来表示路径分隔符,或使用句点来表示当前目录,或使用双点来表示父目录。由于您不能将“\\?\”前缀用于相对路径,因此相对路径始终限制为总共 MAX_PATH 个字符。
答案2
这是一个延长长度路径. 参见MSDN:命名文件、路径和命名空间
在 Windows API 中(以下段落中讨论了某些例外),路径的最大长度为 MAX_PATH,定义为 260 个字符。[...]
Windows API 有许多函数也有 Unicode 版本,允许扩展长度路径,最大路径总长度为 32,767 个字符。[...] 要指定扩展长度路径,请使用前缀
"\\?\"
。例如,"\\?\D:\very long path"
。
基本上,\\?\
告诉 Windows API 将路径直接传递给文件系统,而无需进一步操作。除了扩展可用长度外,它还禁用到的自动转换/
,\
还允许您使用保留的文件名.
和..
。有关详细信息,请参阅上面链接的文章。