在Windows平台上,
这是因为这是正确的规范路径,并允许在Windows上使用“长”路径(参见为什么我的规范化路径前缀为\\?\)。
然而,这不是用户友好的路径,人们无法理解它。
为了显示和记录日志,如何以通用平台无关的方式轻松地删除此前缀?
我应该将其转换为
我的要求具体包括:
- 在Windows上,对于规范路径,正确显示
示例:
Path::canonicalize()
返回的路径格式为:\\\\?\\C:\\projects\\3rdparty\\rust...
这是因为这是正确的规范路径,并允许在Windows上使用“长”路径(参见为什么我的规范化路径前缀为\\?\)。
然而,这不是用户友好的路径,人们无法理解它。
为了显示和记录日志,如何以通用平台无关的方式轻松地删除此前缀?
Path :: components
将返回组件\\?\C:
作为第一个组件...我应该将其转换为
&str
并使用正则表达式吗?是否有其他更符合人体工程学的方法来删除前缀,例如一些具有Display
实现的类型自动执行正确的操作?我的要求具体包括:
- 在Windows上,对于规范路径,正确显示
X:\\...
。
- 不会损坏非Windows平台(例如剥离或更改路径组件)。示例:
use std::path::{Path, PathBuf};
fn simple_path<P: AsRef<Path>>(p: P) -> String {
String::from(p.as_ref().to_str().unwrap()) // <-- ?? What to do here?
}
pub fn main() {
let path = PathBuf::from("C:\temp").canonicalize().unwrap();
let display_path = simple_path(path);
println!("Output: {}", display_path);
}
\\?\UNC\server\share
和\\?\cat_pics
应该发生什么? - Shepmaster