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 中使用
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