Rust 获取项目文件夹的绝对路径

在写某个玩具项目的时候,需要在 integration test 中读取某个复杂的配置文件。而读取这个文件本身也是测试的一部分。目录结构如下:

Proj
  |- src
  |- tests
       |- my_tests.rs
       |- some.conf

但是使用 cargo test 时,执行目录并不确定(可以更改 target 路径),因此这里必须在代码中使用绝对路径读取 some.conf

好在 Rust 确实隐蔽地提供了这么一个功能,因为 Cargo 在编译时必须知道项目的位置,因此会设置一个环境变量 CARGO_MANIFEST_DIR。这个环境变量就是 Cargo.toml 文件所在的文件夹,也就是 项目文件夹的绝对路径。通过它,我们可以自己手动拼接一个 some.conf 的绝对路径:

use std::path::PathBuf;

#[test]
fn test_something() {
// omitted...
    let mut config_path = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
    config_path.push("tests");
    config_path.push("some.conf");
    println!("config file: {:?}", config_path);
// omitted...
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容