我有以下代码:
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
变量存活更长时间。看起来String
和str
都不支持Copy
特质。
所以主要的问题是如何使代码上面的工作?
我需要以某种方式复制一个字符串。在C中,我会使用memcpy
或strcpy
来执行该任务。 Rust中有没有类似的功能?
答案 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()))
}
}
}