我正在研究一个个人项目,我试图通过规范Rust中的相对路径来解决这个问题。但是,每当我这样做时,新路径都会以奇怪的\\?\
序列作为前缀。例如,简单的事情:
let p = fs::canonicalize(".").unwrap();
println!("{}", p.display());
将导致类似以下输出:
\\?\C:\Users\[...]\rustprojects\projectname
这不是一个特别的问题,因为我可以用其他方式完成我正在尝试的事情。但是,这似乎是奇怪的行为,特别是如果您要以某种方式使用路径的字符串形式,这需要准确性。为什么这个字符序列在结果前面,我该如何避免呢?
答案 0 :(得分:9)
The \\?\
prefix告诉Windows按原样处理路径,即禁用.
和..
的特殊含义,不解释CON
等特殊设备名称,路径被认为是绝对的。它还允许使用路径up to 32,767 characters (UTF-16 code units), whereas otherwise the limit is 260(除非您使用的是Windows 10,版本1607或更高版本,并且您的应用程序选择更长的路径)。
因此,\\?\
前缀可确保您获得可用的路径;删除该前缀可能会产生一个不可用的路径或解析为不同的文件!因此,我建议您在路径中保留该前缀。