Rust 如何将文件夹添加到文件名之前的路径?

Rust 如何将文件夹添加到文件名之前的路径?,rust,path,filepath,Rust,Path,Filepath,如何使用Path或PathBuf将C:\foo\bar.txt更改为C:\foo\baz\bar.txt 我想在文件名前面的路径中添加一个文件夹。该类型支持多种方法来操作和分解路径,因此添加目录应该很简单。例如: fn append_dir(p: &Path, d: &str) -> PathBuf { let dirs = p.parent().unwrap(); dirs.join(d).join(p.file_name().unwrap()) } 我

如何使用Path或PathBuf将C:\foo\bar.txt更改为C:\foo\baz\bar.txt

我想在文件名前面的路径中添加一个文件夹。

该类型支持多种方法来操作和分解路径,因此添加目录应该很简单。例如:

fn append_dir(p: &Path, d: &str) -> PathBuf {
    let dirs = p.parent().unwrap();
    dirs.join(d).join(p.file_name().unwrap())
}
我正在Linux上测试它,所以对我来说测试看起来像这样,但是在Windows上你应该可以使用C:\。。。很好:

fn main() {
    let p = Path::new(r"/foo/bar.txt");
    assert_eq!(append_dir(&p, "baz"), Path::new(r"/foo/baz/bar.txt"));
}
该类型支持多种方法来操作和分解路径,因此追加目录应该很简单。例如:

fn append_dir(p: &Path, d: &str) -> PathBuf {
    let dirs = p.parent().unwrap();
    dirs.join(d).join(p.file_name().unwrap())
}
我正在Linux上测试它,所以对我来说测试看起来像这样,但是在Windows上你应该可以使用C:\。。。很好:

fn main() {
    let p = Path::new(r"/foo/bar.txt");
    assert_eq!(append_dir(&p, "baz"), Path::new(r"/foo/baz/bar.txt"));
}

这是一个字符串操作。使用模块我不认为将路径视为字符串是跨平台的。你是对的,但路径不是跨平台的,在Linux和Windows上是不同的。好的,Windows上的反斜杠字符\正在分隔目录。在Linux或MacOSX上,您将使用forwardslash/用于类似的目的。。。根据本地平台的路径语法直接处理字符串。@GirkovArpa std::path实用程序无疑是最好的选择,它们比手动字符串操作更方便,更可能是跨平台的。这是一种字符串操作。使用模块我不认为将路径视为字符串是跨平台的。你是对的,但路径不是跨平台的,在Linux和Windows上是不同的。好的,Windows上的反斜杠字符\正在分隔目录。在Linux或MacOSX上,您将使用forwardslash/用于类似的目的。。。根据本地平台的路径语法直接处理字符串。@GirkovArpa std::path实用程序无疑是最好的选择,它们比手动字符串操作更方便,更可能是跨平台的。