如何复制 String 或 str

How can I copy String or str

我有以下代码:

let mut dirs = vec![String::from(".")];
// This one doesn't work too:
//let mut dirs = vec!["."];

while dirs.len() > 0 {
    let paths = fs::read_dir(dirs.pop().unwrap()).unwrap();
    for path in paths {            
        if path.unwrap().metadata().unwrap().is_dir() {
            dirs.push(String::from(path.unwrap().path().to_str().unwrap()).clone())
            // This one doesn't work too:
            //dirs.push(path.unwrap().path().to_str().unwrap())
        }
    }
}

总是报编译错误:use of moved value: 'path' [E0382].

我尝试了不同的方法,但仍然不明白如何复制一个字符串 path.to_str() 以便它比 path 变量存活得更久。看起来 Stringstr 都不支持 Copy 特征。 所以主要问题是如何使上面的代码工作?

我需要以某种方式复制一个字符串。在 C 中,我会使用 memcpystrcpy 来完成该任务。 Rust 中有类似的函数吗?

unwrap() 的调用将移动您的 path 对象。最简单的方法是在循环开始时通过说

移动它一次
let path = path.unwrap();

然后使用展开的路径对象:

let mut dirs = vec![String::from(".")];

while dirs.len() > 0 {
    let paths = fs::read_dir(dirs.pop().unwrap()).unwrap();
    for path in paths {
        let path = path.unwrap();
        if path.metadata().unwrap().is_dir() {
            dirs.push(String::from(path.path().to_str().unwrap()))
        }
    }
}