rust - 错误:使用移动值:`path`。如何更正此代码?
问题描述
编译代码时出现此错误:请帮助我。
使用移动值:`path` 在 moverustc(E0382) 之后使用的值 main.rs(16, 9):移动发生是因为 `path` 的类型为 `std::result::Result`,它没有实现 `Copy` trait main.rs(18, 32): `path` 由于这个方法调用而移动 main.rs(19, 29): 移动后这里使用的值
fn main() -> std::io::Result<()> {
let paths = fs::read_dir("./").unwrap();
let mut text = String::new();
let mut idx = 0;
for path in paths {
// let path_str = path.unwrap().path().display().to_string();
let path_str = if path.unwrap().path().is_dir() {
path.unwrap().path().display().to_string()
}
else {
let mut path = path.unwrap().path().display().to_string();
path.push_str("[file]");
path
};
let path_trimed = path_str.trim_start_matches("./");
idx += 1;
println!("{} -> file/folder: {}", idx + 1, path_trimed);
text.push_str(&path_trimed);
text.push_str("\n");
}
// println!("{}", text);
// writing the string to file
let mut file = fs::File::create("file_list.txt")?;
file.write_all(&text.as_bytes())?;
Ok(())
}
解决方案
我认为问题在于您多次解包路径,每次解包都借用变量路径,因此当您尝试第二次解包时生锈会抱怨。我建议你尝试只打开一次:
use std::fs;
use std::io::Write;
fn main() -> std::io::Result<()> {
let paths = fs::read_dir("./").unwrap();
let mut text = String::new();
let mut idx = 0;
for path in paths {
// let path_str = path.unwrap().path().display().to_string();
let path = path.unwrap().path();
let path_str = if path.is_dir() {
path.display().to_string()
} else {
let mut path = path.display().to_string();
path.push_str("[file]");
path
};
let path_trimed = path_str.trim_start_matches("./");
idx += 1;
println!("{} -> file/folder: {}", idx + 1, path_trimed);
text.push_str(&path_trimed);
text.push_str("\n");
}
// println!("{}", text);
// writing the string to file
let mut file = fs::File::create("file_list.txt")?;
file.write_all(&text.as_bytes())?;
Ok(())
}
推荐阅读
- c# - 针对(数据)对象上用户定义的基于条件的操作的设计
- python - VPython 脚本的输出是什么?为什么它会在 Chrome 中为我打开?
- php - 从公用文件夹中获取图像
- spring-boot - 更新到格林威治后 Spring Stream 的集成测试失败
- javascript - 将多个变量合二为一
- javascript - 使用 SpringBoot 的 Whitelabel 错误错误页面
- c# - 获取具有特定属性的属性(即时编译)
- jquery - 使用 Ajax 动态更改 Bootstrap 4 弹出框的内容
- java - Zuul 是我的应用程序的唯一入口点吗?
- mysql - 检查字段是否存在且不为空