#path #platform-independent #component #interaction #unix-style #file

uni-path

平台无关路径操作

2 个稳定版本

1.51.1 2021 年 4 月 17 日

#692 in 文件系统

Download history 9/week @ 2024-03-12 46/week @ 2024-03-19 106/week @ 2024-03-26 116/week @ 2024-04-02 2/week @ 2024-04-16 9/week @ 2024-04-23 24/week @ 2024-04-30 8/week @ 2024-05-07 3/week @ 2024-05-14 12/week @ 2024-05-21 10/week @ 2024-05-28 19/week @ 2024-06-04 87/week @ 2024-06-11 83/week @ 2024-06-18 15/week @ 2024-06-25

206 每月下载量

MIT/Apache

76KB
1.5K SLoC

uni-path

平台无关的 Unix 风格路径操作。

理由

Rust 的 std::path 模块提供了一种便捷的路径操作方式。我们希望使用这种方式不仅与操作系统文件系统配合,也能与虚拟文件系统(例如内存中的文件系统)配合。遗憾的是,std::path 是平台相关的,这意味着它在不同平台上的行为不同。

关于

这个 crate 与 std::path 非常相似,因为它的源代码直接从 std::path 实现中复制过来,只修改了以下几点

  • 删除所有平台相关的条件,只留下 Unix 代码。
  • 使用 strString 替代 OsStrOsString
  • 删除所有与操作系统文件系统的交互。

lib.rs:

平台无关路径操作。

此模块提供了两种类型,PathBufPath(类似于 String 和 [str]),用于抽象地处理路径。这些类型是 String 和 [str] 的薄包装,这意味着它们直接在字符串上操作。

路径可以通过遍历由Component方法返回的结构来解析为Component。这些Component大致对应于路径分隔符(/)之间的子字符串。您可以使用PathBufpush方法从组件中重建等效路径;请注意,路径可能因components方法的文档中描述的规范化而存在语法上的差异。

简单用法

路径操作包括从切片中解析组件以及构建新的拥有路径。

要解析路径,您可以从[str]切片创建一个Path切片并开始提问

use uni_path::Path;

let path = Path::new("/tmp/foo/bar.txt");

let parent = path.parent();
assert_eq!(parent, Some(Path::new("/tmp/foo")));

let file_stem = path.file_stem();
assert_eq!(file_stem, Some("bar"));

let extension = path.extension();
assert_eq!(extension, Some("txt"));

要构建或修改路径,请使用PathBuf

use uni_path::PathBuf;

// This way works...
let mut path = PathBuf::from("/");

path.push("lib");
path.push("libc");

path.set_extension("so");

// ... but push is best used if you don't know everything up
// front. If you do, this way is better:
let path: PathBuf = ["/", "lib", "libc.so"].iter().collect();

无运行时依赖