В Windows Path::canonicalize()
возвращает путь в формате:
\\\\?\\C:\\projects\\3rdparty\\rust...
Это потому, что это правильный канонический путь, и он допускает «длинные» пути в Windows (см. Почему мой канонизированный путь имеет префикс \\? \ ).
Однако это не удобный путь, и люди не понимают его.
Для отображения и ведения журнала как я могу легко удалить этот префикс независимо от общей платформы?
Path::components
вернет компонент \\?\C:
в качестве первого компонента ...
Должен ли я преобразовать это в &str
и использовать регулярное выражение? Есть ли какой-то другой, более эргономичный метод удаления префикса, например, какой-то тип с реализацией Display
, который автоматически делает правильные вещи?
Мои требования конкретно:
- Правильно отображает
X:\\...
для канонического пути в Windows.
- Не портит платформы, отличные от 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);
}