我可以显示如下目录列表:
use std::fs;
fn main() {
let paths = fs::read_dir("./").unwrap();
for path in paths {
println!("Name: {}", path.unwrap().path().display())
}
}
我可以在迭代之前对ReadDir
迭代器进行排序吗?目录名称是类似日期的数字,如201610131503
。我读了documentation for ReadDir
,但我没有找到内置函数。也许我不知道如何搜索?
答案 0 :(得分:8)
ReadDir
一次只读取一个条目,因此在迭代之前无法对其进行排序。没有排序的readdir
系统调用(至少在我知道的平台上没有,这意味着没有可移植的系统)。
所以唯一的选择是阅读Vec
并在那里排序:
use std::fs;
fn main() {
let mut paths: Vec<_> = fs::read_dir("/").unwrap()
.map(|r| r.unwrap())
.collect();
paths.sort_by_key(|dir| dir.path());
for path in paths {
println!("Name: {}", path.path().display())
}
}
答案 1 :(得分:5)
我可以在迭代之前对
ReadDir
迭代器进行排序吗?
基本上没有。在macOS和Linux上,readdir_r
function is used。这is not guaranteed to return in any specific order。通常,它将以文件系统最快/最简单的顺序返回,每次调用它时 都会更改。
您需要收集项目,对它们进行排序,然后重新进行迭代。