如何仅获取当前可执行文件路径的目录部分?

蒂蒙邮报

我想从可执行文件所在目录的config文件夹中读取文件。我使用以下功能来做到这一点:

use std::env;

// add part of path to te path gotten from fn get_exe_path();
fn get_file_path(path_to_file: &str) -> PathBuf {
    let final_path = match get_exe_path() {
        Ok(mut path) => {
            path.push(path_to_file);
            path
        }
        Err(err) => panic!("Path does not exists"),
    };
    final_path
}

// Get path to current executable
fn get_exe_path() -> Result<PathBuf, io::Error> {
    //std::env::current_exe()
    env::current_exe()
}

就我而言,get_exe_path()将返回C:\Users\User\Documents\Rust\Hangman\target\debug\Hangman.exe

使用get_file_path("Config\test.txt"),我想追加到Config\test.txt上述路径。然后,我得到文件的以下路径:C:\Users\User\Documents\Rust\Hangman\target\debug\Hangman.exe\Config\test.txt

问题是,这std::env::current_exe()也将获得可执行文件的文件名,而我不需要它。我只需要它所在的目录。

以下以下函数调用应返回C:\Users\User\Documents\Rust\Hangman\target\debug\Config\test.txt

let path = get_file_path("Config\\test.txt");

我如何从当前目录获取没有可执行文件名称的路径,如上面的示例?除了使用以外,还有其他方法吗std::env::current_exe()

Shepmaster

PathBuf::pop是的镜子PathBuf::push

截断selfself.parent

返回false,如果self.file_name则不执行任何操作None否则,返回true

在您的情况下:

use std::env;
use std::io;
use std::path::PathBuf;

fn inner_main() -> io::Result<PathBuf> {
    let mut dir = env::current_exe()?;
    dir.pop();
    dir.push("Config");
    dir.push("test.txt");
    Ok(dir)
}

fn main() {
    let path = inner_main().expect("Couldn't");
    println!("{}", path.display());
}

也有可能使用Path::parent

Path如果没有,则返回不带最终成分的。

返回None路径是否以根或前缀结尾。

在您的情况下:

fn inner_main() -> io::Result<PathBuf> {
    let exe = env::current_exe()?;
    let dir = exe.parent().expect("Executable must be in some directory");
    let mut dir = dir.join("Config");
    dir.push("test.txt");
    Ok(dir)
}

也可以看看:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获取python可执行文件的文件路径

如何使用 dlopen() 获取可执行文件路径

如何获取可执行文件的完整路径,该可执行文件是从%PATH%中的目录之一调用的

如何获取已编译的python(使用cxFreeze)以将当前工作目录作为可执行文件所在的目录?

Xcode:如何将当前工作目录设置为可执行文件的相对路径?

如何从当前目录外部运行任何可执行文件?

获取可执行文件的路径(使用std :: filesystem)

在Windows cmd中,如何在当前目录中运行可执行文件(而不是在%PATH%中具有相同名称的可执行文件)而不引用完整路径?

获取使用哪个可执行文件的目录

如何获取C#中当前可执行文件的名称?

c#如何获取此当前可执行文件.exe的版本

如何从golang可执行文件中获取当前的gcloud用户名?

如何更改可执行文件的路径?

如何扫描可执行文件的搜索路径

如何从路径调用可执行文件?

如何清除Bash可执行文件路径的缓存?

如何使可执行文件独立于项目目录

如何使用Qt确定可执行文件的目录?

如何返回给定可执行文件的目录?

如何在Go中的$ PATH中获取可执行文件的完整路径

如何在运行时获取Node.js可执行文件的路径

使用launch4j时如何获取可执行文件的路径?

如何从 Get-ChildItem 获取所有可执行文件的路径

如何获取作为 FlatPak 应用程序启动的窗口的可执行文件路径?

如何使用“查找”仅查找可执行文件?

如何获取包含CMake中的可执行文件的目录?

如何从通过链接启动可执行文件的位置获取目录的名称?

可执行文件的路径

查找可执行文件的路径