2个版本

使用旧Rust 2015

0.2.1 2022年6月2日
0.2.0 2022年5月15日

#316文件系统

Download history 15185/week @ 2024-03-14 14167/week @ 2024-03-21 10755/week @ 2024-03-28 17310/week @ 2024-04-04 19137/week @ 2024-04-11 17286/week @ 2024-04-18 16359/week @ 2024-04-25 20046/week @ 2024-05-02 20642/week @ 2024-05-09 22142/week @ 2024-05-16 21736/week @ 2024-05-23 23199/week @ 2024-05-30 30397/week @ 2024-06-06 27850/week @ 2024-06-13 30988/week @ 2024-06-20 27180/week @ 2024-06-27

121,416 每月下载量
用于 70 个crate(14个直接使用)

MIT/Apache

13KB
164

clean-path

crates.io version docs.rs docs license

clean-pathpath-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

规范

清理过程如下

  1. 将多个斜杠减少为单个斜杠。
  2. 消除.路径名元素(当前目录)。
  3. 消除..路径名元素(父目录)以及在其前的不含.和不含..的元素。
  4. 消除以..开头的根路径中的/..,即在路径开始处将其替换为/
  5. 保留以..开头的非根路径中的..元素。

如果此过程的输出为空字符串,则返回表示当前目录的字符串 "."

这种转换是按照词法进行的,不接触文件系统。因此它不会进行任何符号链接解析或绝对路径解析。更多信息请参阅 "正确处理点号"

此功能在 clean 函数和为 std::path::PathBufstd::path::Path 实现的 Clean 特性中公开。

许可证

MITApache-2.0

无运行时依赖