这是一个显示目录内容的简单测试应用程序:
fn main() {
let mut p = PathBuf::from(r"c:");
println!("drive 1: {}", p.to_str().unwrap());
p.push(std::path::MAIN_SEPARATOR.to_string());
println!("drive 2: {}", p.to_str().unwrap());
p.push(r"*.*");
println!("drive 3: {}", p.to_str().unwrap());
println!("root: {}", p.to_str().unwrap());
match fs::read_dir(p) {
Ok(x) => {
for path in x {
println!("path: {:?}", path);
}
}
Err(why) => {
println!("Error: {}", why);
}
};
}
输出为:
drive 1: c:
drive 2: c:\
drive 3: c:\\*.*
walk_dir: root: c:\\*.*
Error: The filename, directory name, or volume label syntax is incorrect. (os error 123)
println!
将遵循我的前进路径。当我从函数中引入match
语句时,请原谅变量名,以使其更易于阅读。当我将最终路径
c:\*.*
剪切并粘贴到带有dir
的命令提示符中时,它可以按预期工作。我知道这不是字符串的内容,而是我在做什么。
最佳答案
这是对read_dir
中的输入参数的误解。
我当时以为read_dir
需要一个类似于Windows dir命令行或UNIX/Linux ls
命令的字符串。也就是说,我给它c:\\*.*
期望c:
驱动器根目录中的所有文件。
相反,read_dir
只需要没有文件规范的根目录。排序/过滤将在稍后进行。
起作用的输入只是C:\\.
关于windows - 路径::read_dir和Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61646117/