6 个版本 (2 个稳定版)
新 1.0.1 | 2024 年 8 月 20 日 |
---|---|
1.0.0 | 2024 年 8 月 19 日 |
0.2.1 | 2024 年 8 月 7 日 |
0.2.0 | 2024 年 5 月 30 日 |
0.1.1 | 2024 年 5 月 7 日 |
#293 在 文件系统
每月 387 次下载
用于 4 crates
22KB
171 行
rustypath
Rust 的路径 crate。简化路径管理。
概览
在 Rust 中转换和管理路径现在变得简单。
目录
添加到您的项目
cargo add rustypath
功能
在 v1.0.0 和以上版本中,由于功能增长,代码已被分为功能。以下列出了功能
Creation
:这个功能有点像默认功能,因为它允许用户从这些 -> [String
,&str
,Path
,PathBuf
] 创建一个RPath
结构。Management
:此功能默认启用,包含用于管理/操作路径的方法。Conversion
:此功能包含从RPath
到不同路径类型的所有转换方法。Boolean
:此功能包含所有布尔类型检查方法。
用法
-
导入
use rustypath::RPath; // for all basic functionalities.
注意:
实现包括 -> [Clone
,Debug
,PartialEq
,Eq
,PartialOrd
,Ord
,Hash
] 以及用于打印RPath
的自定义 trait。// for printing the path as it is, `Display` trait can be imported. use rustypath::Display;
-
创建
RPath
-
从
&str
,Path
和PathBuf
// to create a RPath let rpath_str = RPath::from(value); // NOTE: value can be of type &str, Path (std::path::Path) or PathBuf (std::path::PathBuf) // Examples: let rpath = RPath::from("/temp"); let rpath_ = RPath::from(std::path::Path::new("/temp")); let rpath__ = RPath::from(std::path::PathBuf::from("/temp"));
-
分配一个空的
RPath
let rpath_empty_or_new = RPath::new(); // this will allocate an empty RPath
-
-
路径操作
-
连接
// make a RPath let rpath = RPath::from("/temp"); // add childs to it, let new = rpath.join("abc.txt"); new.print(); // this will print "/temp/abc.txt"
-
连接多个
// make a RPath let mut rpath = RPath::from("/temp"); // suppose you want to add multiple components to the path rpath.join_multiple(vec![value1, value2, ...]); // here value1, value2 can be any of these types => [&str, Path, or PathBuf] rpath.print(); // this will print -> "/temp/value1/value2/..."
-
基本名/文件名
// to get the basename or filename of the path: let rpath: Rpath = RPath::from("/temp/abc.txt"); let basename: &str = rpath.basename();
-
替换基本名
// suppose there's a RPath -> "/temp/abc.txt" and // you want to just replace "abc.txt" with "xyz.txt" without // typing whole new full paths or rel paths, and just update using // the existing one. let rpath = RPath::from("/temp/abc.txt"); let rpath_ = rpath.with_basename("xyz.txt"); // this will be "/temp/xyz.txt"
-
目录名/父目录
let rpath: RPath = RPath::from("/temp/abc.txt"); // to get the parent let parent: RPath = rpath.dirname(); // this will be "/temp"
-
替换目录名/父目录
// suppose there's a RPath -> "/temp/abc.txt" and // you want to replace "/temp" with something else let rpath: RPath = RPath::from("/temp/abc.txt"); let new = rpath.with_dirname("/temp/temp2"); // this will make it -> "/temp/temp2/abc.txt"
-
扩展名
// to get the extension of a file from the RPath let rpath = RPath::from("/temp/abc.txt"); let extension: &str = rpath.extension(); // NOTE: this will return either extension (if present) or the basename. // if path is invalid it will print error and exit.
-
展开
let rpath = RPath::from("./temp"); let expanded = rpath.expand(); // this will expand if not full path, else it wont throw error. // remeber that it will only expand the path if the path exits // if "./temp" directory doesnt exist it will return "./temp"
-
读取目录(返回一个包含 DirEntry 的迭代器)
let rpath = RPath::from("/temp"); for entry in rpath.read_dir().expect("Failed to call read_dir") { if let Ok(entry) = entry { println!("{:?}", entry.path()); } }
-
获取当前工作目录
let current_dr: RPath = RPath::pwd();
-
获取您操作系统的家目录
let home: RPath = RPath::gethomedir();
-
清除当前 RPath 缓冲区
let rpath = RPath::from("/temp"); rpath.clear(); // this will be equivalent to RPath::new();
-
-
转换
-
转换为字符串
let rpath = RPath::from("/abc"); let rpath_string = rpath.convert_to_string();
-
转换为PathBuf
let rpath = RPath::from("/abc"); let rpath_in_pathbuf = rpath.convert_to_pathbuf();
-
-
布尔值
-
存在
let rpath = RPath::from("/abc"); if rpath.exists() { // do something }
-
is_dir/is_file
let rpath = RPath::from("/abc"); if rpath.is_dir() { // do something } else if rpath.is_file() { // do something }
同样,以下也会生效
-
is_absolute
-
is_symlink
-
is_relative
-
-
打印
RPath
支持以单个字符串形式打印。要使用
.print()
函数,请导入Display
特质use rustypath::Display;
使用
.print()
方法进行打印。let rpath = RPath::gethomedir(); rpath.print(); // this will print `homedir` path in a single line.
要与其他字符串一起打印
let rpath = RPath::gethomedir(); println!("Homedir: {}", rpath.convert_to_string()); println!("{:?}", rpath);
-
运算符
- 支持
==
和!=
运算符let rpath = RPath::pwd(); let rpath_ = RPath::gethomedir(); if rpath == rpath_ { // do something } else { // do something else }
- 支持
-
支持Hash
问题
如果发现任何问题,请在此处添加。
拉取请求
鼓励提交拉取请求,可以在此处添加。
依赖项
~0–10MB
~48K SLoC