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

Mut*_*pus 2 windows filesystems canonicalization rust

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

let p = fs::canonicalize(".").unwrap();
println!("{}", p.display());
Run Code Online (Sandbox Code Playgroud)

将导致类似以下输出:

\\?\C:\Users\[...]\rustprojects\projectname
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*gné 9

\\?\前缀告诉Windows原样治疗的路径,即它禁用的特殊意义...喜欢,特殊设备名称CON不解释,假设路径是绝对的.它还允许使用最多32,767个字符(UTF-16代码单元)的路径,否则限制为260(除非您使用的是Windows 10,版本1607或更高版本,并且您的应用程序选择更长的路径).

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