pub fn read_dir<P: AsRef<Path>>(path: P) -> Result<ReadDir>
Expand description
返回目录中条目的迭代器。
迭代器将产生 io::Result<DirEntry>
实例。
最初构造迭代器后,可能会遇到新的错误。
当前目录和父目录 (通常为 .
和 ..
) 的条目将被跳过。
特定于平台的行为
该函数当前对应于 Unix 上的 opendir
函数和 Windows 上的 FindFirstFile
函数。
推进迭代器当前对应于 Unix 上的 readdir
和 Windows 上的 FindNextFile
。
注意,这个 将来可能会改变。
该迭代器返回条目的顺序取决于平台和文件系统。
Errors
在以下情况下,此函数将返回错误,但不仅限于这些情况:
- 提供的
path
不存在。 - 该进程没有查看内容的权限。
path
指向非目录文件。
Examples
use std::io;
use std::fs::{self, DirEntry};
use std::path::Path;
// 一种仅通过访问文件来遍历目录的可能实现方式
fn visit_dirs(dir: &Path, cb: &dyn Fn(&DirEntry)) -> io::Result<()> {
if dir.is_dir() {
for entry in fs::read_dir(dir)? {
let entry = entry?;
let path = entry.path();
if path.is_dir() {
visit_dirs(&path, cb)?;
} else {
cb(&entry);
}
}
}
Ok(())
}
Runuse std::{fs, io};
fn main() -> io::Result<()> {
let mut entries = fs::read_dir(".")?
.map(|res| res.map(|e| e.path()))
.collect::<Result<Vec<_>, io::Error>>()?;
// 不保证 `read_dir` 返回条目的顺序。
// 如果需要可重复的排序,则应对条目进行显式排序。
entries.sort();
// 现在,条目已经按照路径进行了排序。
Ok(())
}
Run