Replace 更换生锈的零件
假设我有以下三条路径:Replace 更换生锈的零件,replace,path,formatting,rust,Replace,Path,Formatting,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"); 现在,我想将文件复制到dst,但为此我需要更正路径,这样我就可以拥有新文件,其路径解析为/home/meurer/test/b/01/foo.txt。
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");
现在,我想将文件
复制到dst
,但为此我需要更正路径,这样我就可以拥有新文件
,其路径解析为/home/meurer/test/b/01/foo.txt
。换句话说,如何从文件中删除src
,然后将结果附加到dst
/home/meurer/test/a/01/foo.txt
->/home/meurer/test/b/01/foo.txt
请注意,我们不能假设src
始终与dst
类似,您可以使用:
像往常一样,您可能不想在生产代码中使用expect
,这只是为了简洁的回答。Dang!太快了:P@CentrilShepmaster总是回答得很快,我只是理解Shepmaster回答的问题^^^@central在这种情况下,我有一个不公平的优势。这个问题实际上是第一个被问到的,所以在问题发布到这里之前,我已经准备好了答案。
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"));
}