Function std::fs::read_dir

1.0.0 · source ·
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(())
}
Run
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(())
}
Run