7 个版本

0.3.1 2024年4月14日
0.3.0 2024年4月14日
0.2.3 2024年4月14日
0.2.0 2023年3月10日
0.1.3 2022年5月31日

#217 in 文件系统


densky 中使用

MIT/Apache

43KB
816

recv-dir

简单的递归目录遍历。

描述

递归地有条件地使用迭代器遍历目录。

示例

访问所有目录

fn main() {
    use recv_dir::RecursiveDirIterator;
    let dir = RecursiveDirIterator::from_root("test_dir").unwrap();

    for entry in dir {
        println!("{:?}", entry);
    }
}
fn main() {
    use std::path::Path;
    use recv_dir::RecursiveDirIterator;
    let dir = RecursiveDirIterator::with_closure_filter("test_dir", |dir: &Path| !dir.is_symlink()).unwrap();

    for entry in dir {
        println!("{:?}", entry);
    }
}

控制深度

仅访问 test_dir 中的文件

fn main() {
    use std::path::{Path, PathBuf};
    use recv_dir::RecursiveDirIterator;
    let root = PathBuf::from("test_dir");
    let ancestors = root.ancestors().count();
    let dir = RecursiveDirIterator::with_closure_filter(root, |dir: &Path| dir.ancestors().count() - ancestors <= 1).unwrap();

    for entry in dir {
        println!("{:?}", entry);
    }
}

访问 test_dir 和第一级子目录中的文件

fn main() {
    use std::path::{Path, PathBuf};
    use recv_dir::RecursiveDirIterator;
    let root = PathBuf::from("test_dir");
    let ancestors = root.ancestors().count();
    let dir = RecursiveDirIterator::with_closure_filter(root, |dir: &Path| dir.ancestors().count() - ancestors <= 2).unwrap();

    for entry in dir {
        println!("{:?}", entry);
    }
}

您也可以组合过滤器

fn main() {
    use std::num::NonZeroUsize;
    use std::path::{Path, PathBuf};
    use recv_dir::{Filter, MaxDepth, NoSymlink, RecursiveDirIterator};
    let root = PathBuf::from("test_dir");
    let dir = RecursiveDirIterator::with_filter(
        &root,
        NoSymlink.and(MaxDepth::new(&root, NonZeroUsize::new(2).unwrap())),
    ).unwrap();

    for entry in dir {
        println!("{:?}", entry);
    }
}

阅读文档以获取更多信息

依赖

~0–1.1MB
~19K SLoC