为什么我的规范化路径以\\?\为前缀

时间:2016-12-20 01:41:25

标签: windows filesystems rust canonicalization

我正在研究一个个人项目,我试图通过规范Rust中的相对路径来解决这个问题。但是,每当我这样做时,新路径都会以奇怪的\\?\序列作为前缀。例如,简单的事情:

let p = fs::canonicalize(".").unwrap();
println!("{}", p.display());

将导致类似以下输出:

\\?\C:\Users\[...]\rustprojects\projectname

这不是一个特别的问题,因为我可以用其他方式完成我正在尝试的事情。但是,这似乎是奇怪的行为,特别是如果您要以某种方式使用路径的字符串形式,这需要准确性。为什么这个字符序列在结果前面,我该如何避免呢?

1 个答案:

答案 0 :(得分:9)

The \\?\ prefix告诉Windows按原样处理路径,即禁用...的特殊含义,不解释CON等特殊设备名称,路径被认为是绝对的。它还允许使用路径up to 32,767 characters (UTF-16 code units), whereas otherwise the limit is 260(除非您使用的是Windows 10,版本1607或更高版本,并且您的应用程序选择更长的路径)。

因此,\\?\前缀可确保您获得可用的路径;删除该前缀可能会产生一个不可用的路径或解析为不同的文件!因此,我建议您在路径中保留该前缀