#path #path-buf #stdlib

os_path

与标准库互操作性的智能路径处理

14个版本 (7个破坏性)

0.8.0 2024年4月15日
0.6.4 2023年8月22日
0.6.3 2023年7月19日

操作系统分类中排名191

Download history 192/week @ 2024-04-28 107/week @ 2024-05-05 46/week @ 2024-05-12 141/week @ 2024-05-19 119/week @ 2024-05-26 129/week @ 2024-06-02 133/week @ 2024-06-09 186/week @ 2024-06-16 184/week @ 2024-06-23 155/week @ 2024-06-30 62/week @ 2024-07-07 59/week @ 2024-07-14 218/week @ 2024-07-21 172/week @ 2024-07-28 107/week @ 2024-08-04 119/week @ 2024-08-11

每月下载量617
liboxen中使用

MIT/Apache

25KB
399

OsPath

路径应该处理的方式。

描述

提供与std::path::PathBuf和std::path::Path的互操作性,同时智能地处理路径,而不是无脑的字符串。

主要功能

路径标准化

路径总是标准化到平台的本地路径格式。

假根处理

当你有一个路径,比如/foo/bar,并尝试将其与join()push() /baz.txt连接时,会触发假根错误。使用标准库Path和PathBuf,最终得到的路径将是/baz.txt。这非常反直觉,并且不是大多数用户所期望的,而且一点也不友好,因为你被迫编写额外的代码来从路径的开头删除斜杠。

相反,OsPath会做你期望的事情,并返回/foo/bar/baz.txt

OsPath这样做,同时假设在开始时两个路径都是绝对的。如果你在之前查询了任何一个路径,它们都会对is_absolute()返回true。然而,当你连接两个路径时,OsPath将提供预期的行为

请注意,在Windows上这不是一个问题,因为尝试将任何以C:\开头的路径连接起来是没有意义的,而连接以/\\开头的路径则不是。

路径遍历

是的,如果你将一个以..开头的路径与join()push()连接,OsPath将遍历路径,并构建正确的路径。/foo/bar/baz/../pow.txt连接将返回/foo/bar/pow.txt

OsPath可以处理连续的多个..,并将正确遍历路径。/foo/bar/baz/../../pow.txt连接将返回/foo/pow.txt

如果您的路径以文件结尾,并且您使用了 join()push() 方法添加一个以 .. 开头的路径,OsPath 将遍历该路径并构建正确的路径。将 /foo/bar/baz.txt../pow.txt 连接后,将返回 /foo/pow.txt

注意:使用 OsPath::from() 方法时,路径遍历不是自动进行的,因为保留路径中的 .. 可能是有益的。例如,如果您要将此路径传递给外部程序,您可能希望保留 .. 以便程序可以自行处理路径遍历。但是,可以使用 os_path.resolve() 调用。

文件和目录处理

如果路径以 /\\ 结尾,OsPath 假定这是一个目录,否则它是一个文件。

用法

像使用 std::path::PathBuf 一样使用。

它可以传递给任何接受 <P: AsRef>(path: P) 作为参数的函数,并且可以从中构建,因此它与标准库完全兼容。

许可证

MIT 许可证

项目状态

非常稳定。文档基本完整。

我根据需要添加实现。

依赖关系

~2.5–4MB
~76K SLoC