2个版本
使用旧Rust 2015
0.2.1 | 2022年6月2日 |
---|---|
0.2.0 | 2022年5月15日 |
#316 在 文件系统
121,416 每月下载量
用于 70 个crate(14个直接使用)
13KB
164 行
clean-path
clean-path
是path-clean
crate的安全分支。
安装
cargo add clean-path
使用
use std::path::{Path, PathBuf};
use clean_path::{clean, Clean};
assert_eq!(clean("foo/../../bar"), PathBuf::from("../bar"));
assert_eq!(Path::new("hello/world/..").clean(), PathBuf::from("hello"));
assert_eq!(
PathBuf::from("/test/../path/").clean(),
PathBuf::from("/path")
);
关于
此分支旨在提供与path-clean
相同的实用功能,而不使用不安全代码。此外,API得到了改进(clean
使用AsRef<Path>
而不是仅仅&str
)并且Clean
除了在PathBuf
上实现外,还在Path
上实现。
主要的清理过程使用PathBuf
提供的方法实现,因此它应该会带来可移植性的好处,尤其是在正确处理跨平台文件路径方面。
此外,path-clean
中的原始实现相当晦涩难懂,因此如果您需要检查和理解代码,则此crate提供了更易于阅读的实现。
然而,当前实现并未高度优化,因此如果性能是首要考虑,请考虑使用path-clean
。
规范
清理过程如下
- 将多个斜杠减少为单个斜杠。
- 消除
.
路径名元素(当前目录)。 - 消除
..
路径名元素(父目录)以及在其前的不含.
和不含..
的元素。 - 消除以
..
开头的根路径中的/..
,即在路径开始处将其替换为/
。 - 保留以
..
开头的非根路径中的..
元素。
如果此过程的输出为空字符串,则返回表示当前目录的字符串 "."
。
这种转换是按照词法进行的,不接触文件系统。因此它不会进行任何符号链接解析或绝对路径解析。更多信息请参阅 "正确处理点号"。
此功能在 clean
函数和为 std::path::PathBuf
和 std::path::Path
实现的 Clean
特性中公开。