#path #d33pster #system-paths #path-manager

rustypath

轻松管理 Rust 中的路径。一个直接无废话的库来管理路径。要么你得到你想要的东西,要么你得不到。

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文件系统

Download history 204/week @ 2024-05-02 42/week @ 2024-05-09 23/week @ 2024-05-16 19/week @ 2024-05-23 180/week @ 2024-05-30 9/week @ 2024-06-06 8/week @ 2024-06-13 2/week @ 2024-06-20 2/week @ 2024-06-27 1/week @ 2024-07-11 1/week @ 2024-07-18 5/week @ 2024-07-25 68/week @ 2024-08-01 46/week @ 2024-08-08 268/week @ 2024-08-15

每月 387 次下载
用于 4 crates

MIT 许可证

22KB
171

Crates.io Total Downloads

rustypath

Rust 的路径 crate。简化路径管理。

概览

在 Rust 中转换和管理路径现在变得简单。

目录

添加到您的项目

cargo add rustypath

功能

v1.0.0 和以上版本中,由于功能增长,代码已被分为功能。以下列出了功能

  • Creation:这个功能有点像默认功能,因为它允许用户从这些 -> [String&strPathPathBuf] 创建一个 RPath 结构。
  • Management:此功能默认启用,包含用于管理/操作路径的方法。
  • Conversion:此功能包含从 RPath 到不同路径类型的所有转换方法。
  • Boolean:此功能包含所有布尔类型检查方法。

用法

  • 导入

    use rustypath::RPath; // for all basic functionalities.
    

    注意: 实现包括 -> [CloneDebugPartialEqEqPartialOrdOrdHash] 以及用于打印 RPath 的自定义 trait。

    // for printing the path as it is, `Display` trait can be imported.
    use rustypath::Display;
    
  • 创建 RPath

    • &strPathPathBuf

      // 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