14个版本 (7个破坏性)
0.8.0 | 2024年4月15日 |
---|---|
0.6.4 | 2023年8月22日 |
0.6.3 | 2023年7月19日 |
在操作系统分类中排名191
每月下载量617
在liboxen中使用
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