2 个稳定版本
1.51.1 | 2021 年 4 月 17 日 |
---|
#692 in 文件系统
206 每月下载量
76KB
1.5K SLoC
uni-path
平台无关的 Unix 风格路径操作。
理由
Rust 的 std::path
模块提供了一种便捷的路径操作方式。我们希望使用这种方式不仅与操作系统文件系统配合,也能与虚拟文件系统(例如内存中的文件系统)配合。遗憾的是,std::path
是平台相关的,这意味着它在不同平台上的行为不同。
关于
这个 crate 与 std::path
非常相似,因为它的源代码直接从 std::path
实现中复制过来,只修改了以下几点
- 删除所有平台相关的条件,只留下 Unix 代码。
- 使用
str
和String
替代OsStr
和OsString
。 - 删除所有与操作系统文件系统的交互。
lib.rs
:
平台无关路径操作。
此模块提供了两种类型,PathBuf
和 Path
(类似于 String
和 [str
]),用于抽象地处理路径。这些类型是 String
和 [str
] 的薄包装,这意味着它们直接在字符串上操作。
路径可以通过遍历由Component
方法返回的结构来解析为Component
。这些Component
大致对应于路径分隔符(/
)之间的子字符串。您可以使用PathBuf
的push
方法从组件中重建等效路径;请注意,路径可能因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();