#relative-path #path #relative #home-dir #absolutize #add-path

path-calculate

一个小型路径工具,用于计算绝对路径或相对路径

2 个版本

0.1.3 2021 年 2 月 2 日
0.1.2 2021 年 1 月 29 日
0.1.1 2021 年 1 月 27 日
0.1.0 2021 年 1 月 27 日

文件系统 中排名第 534

Download history 194/week @ 2024-01-01 151/week @ 2024-01-08 125/week @ 2024-01-15 34/week @ 2024-01-22 18/week @ 2024-01-29 22/week @ 2024-02-05 40/week @ 2024-02-12 42/week @ 2024-02-19 71/week @ 2024-02-26 54/week @ 2024-03-04 43/week @ 2024-03-11 36/week @ 2024-03-18 33/week @ 2024-03-25 42/week @ 2024-04-01 26/week @ 2024-04-08 23/week @ 2024-04-15

每月下载量 127
fontpm 中使用

MIT 许可证

13KB
108

路径计算

这是一个库,可以帮助您使用 PathPathBuf 进行计算,例如获取绝对路径、获取两个路径之间的相对路径、如果存在则获取 '~'(home_dir)。

这是基于 path_absolutize 库,我用 as_absolute_path 替换了 absolutize 这一行,因为它不支持 '~',这是最近使用的,至少在 UNIX 系统中。

以下是一些示例,展示了如何使用这个库。

示例

您可以使用以下方法。

home_dir

如果您的环境中存在当前用户的 HOME,则获取它,否则返回错误(我有点懒,所以只是把这个方法放在 Calculate trait 中)。

extern crate path_calculate;

use std::path::Path;

use path_calculate::*;

let p = Path::new("/tmp");

if let Ok(home_dir) = p.home_dir() {
    println!("Home path: {:?}", home_dir);
}

as_absolute_path

这几乎与 path-absolutize 中的 absolutize 相似,我只在这个方法中添加了对 ~($HOME)的支持(Unix 或 Windows)。

extern crate path_calculate;

use std::path::Path;

use path_calculate::*;

// If u have $HOME, test `~` support
let p = Path::new("./whatever");
if let Ok(home_dir) = p.home_dir() {
    let p = Path::new("~");
    assert_eq!(home_dir.to_str().unwrap(), p.as_absolute_path().unwrap().to_str().unwrap());
}

let p2 = Path::new("/tmp/a/b/c/../../e/f");

assert_eq!("/tmp/a/e/f", p2.as_absolute_path().unwrap().to_str().unwrap());

relative_root_with

有时我会使用路径的相对根,它返回一个绝对相对根路径。注意,在 Windows 上,它不能在不同磁盘(C:\、D:\等)上计算相对根,当您尝试使用此方法时,它将返回一个 ioerror,例如 io::ErrorKind::InvalidInput

extern crate path_calculate;

use std::path::Path;

use path_calculate::*;

let p1 = Path::new("/home/gits/mkisos");
let p2 = Path::new("/home/cc/trash");

let relative_root = p1.relative_root_with(&p2);

assert_eq!("/home", relative_root.unwrap().to_str().unwrap())
extern crate path_calculate;

use std::io::ErrorKind;
use std::path::Path;

use path_calculate::*;

// Pass Test when in Unix
if cfg!(target_os = "windows") {
    // Windows ok
    let d1 = Path::new("D:\\Games\\Videos\\Replays");
    let d2 = Path::new("D:\\Games\\Dota2");
    
    assert_eq!("D:\\Games", d1.relative_root_with(&d2).unwrap().to_str().unwrap());
    
    // Windows err
    let c1 = Path::new("~");

    assert_eq!(ErrorKind::InvalidInput, c1.relative_root_with(&d1).unwrap_err().kind());
}

此方法用于计算从 src_path 到 dst_path 的相对路径。

extern crate path_calculate;

use std::path::Path;

use path_calculate::*;

// $HOME="/home/chao"
let dst_path = Path::new("/home/chao/works/demo/src");
let src_path = Path::new("/home/chao/trash");

assert_eq!("../works/demo/src", dst_path.related_to(&src_path).unwrap().to_str().unwrap());

add_path

使用 path.join();

依赖项

~125KB