如何复制String或str

时间:2016-01-25 14:14:24

标签: string copy rust lifetime

我有以下代码:

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中有没有类似的功能?

1 个答案:

答案 0 :(得分:1)

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()))
        }
    }
}