#path #directory #fs

working_dir

提供作为本地状态的工作目录抽象

2 个版本

0.1.1 2022年11月26日
0.1.0 2022年11月26日

#1255文件系统

MIT/Apache

19KB
219

working_dir:工作目录作为本地状态

工作目录和相对路径很好,但工作目录是全局状态。这并不好。更改整个程序的工作目录是一种非常糟糕的做法,有很多时候你需要在当前运行的目录之外的工作目录的上下文中做某些事情。

这是一个小型的库,旨在提供充当工作目录的对象,支持一系列文件和目录操作。它是作为一个更大项目的一部分创建的,该项目旨在创建一个工具来自动处理C和C++项目的大规模重构。

在重构这样的项目时,需要更新文件的位置以及任何关于移动文件的 #include 声明。在这种情况下,将包含集视为工作目录列表是有用的,而项目的根目录也可以被视为文件正在移动的工作目录。

以下是一个关于如何在这样的上下文中使用此库的最小示例

use std::path::{Path, PathBuf};

use working_dir::Dir;

fn find_include<P: AsRef<Path>, Q: AsRef<Path>>(include_set: &[Dir<P>], file: Q) -> Option<PathBuf> {
    let file = file.as_ref();

    for include_dir in include_set {
        if include_dir.contains(file) {
            return Some(include_dir / file)
        }
    }
    return None
}


fn main() {
    let file = "stdio.h";
    let include_set = [
        "/usr/local/include",
        "/usr/target/include",
        "/usr/include"
    ].map(Dir);

    if let Some(path) = find_include(&include_set, file) {
        println!("{file} found at {path:?}")
    } else {
        println!("Unable to find {file} in {include_set:?}")
    }
}

依赖关系

~4MB