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)
现在,我想复制file到dst,但为此我需要更正路径,以便我可以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.
你可以使用Path::strip_prefix和Path::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在生产代码中使用它,这只是为了简洁的答案.