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(())
}use 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(())
}