#path #prefix #set #determine #find

common-path

查找一组路径之间的公共前缀

1 个稳定版本

使用旧的 Rust 2015

1.0.0 2018年11月15日

#712文件系统

Download history 42974/week @ 2024-03-14 48666/week @ 2024-03-21 49665/week @ 2024-03-28 59942/week @ 2024-04-04 53222/week @ 2024-04-11 49979/week @ 2024-04-18 42775/week @ 2024-04-25 40519/week @ 2024-05-02 40483/week @ 2024-05-09 40118/week @ 2024-05-16 52058/week @ 2024-05-23 48399/week @ 2024-05-30 38300/week @ 2024-06-06 44036/week @ 2024-06-13 47237/week @ 2024-06-20 35217/week @ 2024-06-27

172,772 每月下载量
522 个 Crates 中使用 (12 直接)

MIT/Apache

7KB
75

common-path

文档

一个小型crate,提供确定一组路径之间公共前缀(如果有的话)的函数

安装

在你的 Cargo.toml 中,将此添加到 [dependencies] 部分

common-path = "1"

并在你的crate根目录中添加

// src/lib.rs, src/main.rs, etc
extern crate common_path;

使用方法

提供了两个函数:common_pathcommon_path_all

extern crate common_path;
use std::path::Path;

fn main() {
    let a = Path::new("/a/b/c/d");
    let b = Path::new("/a/b/e/f");
    let prefix = common_path::common_path(a, b); // => Some(Path::new("/a/b"))
}

如果你需要查找超过2个路径的公共前缀,common_path_all 可以接受任何可以转换为 Path 引用迭代器的对象

extern crate common_path;
use std::path::Path;

fn main() {
    let a = Path::new("/a/b/c/d");
    let b = Path::new("/a/b/e/f");
    let c = Path::new("/a/g/h/i");
    let prefix = common_path::common_path_all(vec![a, b, c]); // => Some(Path::new("/a"))
}

注意事项

此库不尝试规范路径,因此理论上应该具有公共前缀的2个路径可能会被忽略,除非它们在之前规范化。

例如,/foo/bar/baz/foo/quux/../bar/baz/quuux 应该有公共前缀 /foo/bar/baz,一旦它们被规范化,但在这个形式下,此库将返回前缀 /foo。如果你在它们之前调用 Path::canonicalize,你将得到“正确”的前缀,但 canonicalize 将在路径实际不存在时返回错误,因此我想避免在此库中使用它。

无运行时依赖