替换Rust中的路径部分

Ber*_*rer 2 formatting replace path rust

假设我有以下三条路径:

let file = path::Path::new("/home/meurer/test/a/01/foo.txt");
let src = path::Path::new("/home/meurer/test/a");
let dst = path::Path::new("/home/meurer/test/b");
Run Code Online (Sandbox Code Playgroud)

现在,我想复制filedst,但为此我需要更正路径,以便我可以new_file使用解析的路径/home/meurer/test/b/01/foo.txt.换句话说,如何src从中删除file然后将结果附加到dst

/home/meurer/test/a/01/foo.txt - > /home/meurer/test/b/01/foo.txt

请注意,我们不能假设src总是这样dst.

She*_*ter 5

你可以使用Path::strip_prefixPath::join:

use std::path::Path;

fn main() {
    let file = Path::new("/home/meurer/test/a/01/foo.txt");
    let src = Path::new("/home/meurer/test/a");
    let dst = Path::new("/home/meurer/test/b");

    let relative = file.strip_prefix(src).expect("Not a prefix");
    let result = dst.join(relative);

    assert_eq!(result, Path::new("/home/meurer/test/b/01/foo.txt"));
}
Run Code Online (Sandbox Code Playgroud)

像往常一样,您可能不希望expect在生产代码中使用它,这只是为了简洁的答案.