9 个版本
0.1.9 | 2023 年 12 月 8 日 |
---|---|
0.1.8 | 2023 年 12 月 6 日 |
0.1.3 | 2023 年 11 月 29 日 |
#427 in 文件系统
21KB
187 代码行
dir_walker
此包提供了一种方便的方式递归遍历目录。由于 Entry
是基于 std::fs::DirEntry
的,因此此包中的对象可以与标准库类型(如 std::fs::*
)无缝使用。该包的目标是提供一个具有保证顺序和可序列性的文件系统表示,以便通过网络发送序列化对象。
特性
Entry
是一个内存中的递归结构,保证在遍历过程中找到的路径的顺序。顺序是字母顺序,目录在前,文件在后。为了限制内存消耗,默认情况下,访问过的最大条目数限制为10k
,遍历的最大深度限制为100
。这些限制可以通过max_entries
和max_depth
方法更改。Entry
可以用来构建可序列化的对象,例如作为 Json。- 跳过符号链接。
使用
此包的入口点是 Walker
(构建器)结构。使用 new
函数,将遍历的入口点作为输入传递给 Walker
以配置它。然后可以指定多个选项
- 使用
skip_dotted
方法在遍历时跳过点文件或目录。 skip_directories
方法允许跳过目录。- 使用
max_depth
在固定深度停止遍历。 - 使用
max_entries
在遍历过程中设置访问过的最大条目数。
上述所有选项都是可选的。设置选项后,使用 walk_dir
从 root
开始遍历文件系统。
遍历的结果是一个递归构建的 Entry
对象,它在其 dirent
字段中公开其信息,并在 children
字段中列出其依赖项。或者,Entry
对象的 iterator
可以访问一个包含条目的平面列表。
将此软件包添加到您的项目中
[dependencies]
dir_walker = "0.1.9"
示例
使用示例在 测试文件夹 中。
最小示例
use dir_walker::Walker;
let root = "./";
let walker = Walker::new(root);
let entries = walker.walk_dir().unwrap();
// prints a depth first representation of the root directory
entries.into_iter().for_each(|e| println!("{e:?}"));
使用选项
use dir_walker::Walker;
let root = "./";
let skip = ["./target"];
let entries = Walker::new(root)
.skip_directories(&skip)
.skip_dotted()
.walk_dir()
.unwrap();
entries.into_iter().for_each(|e| println!("{e:?}"));
打印
EntryIterator { dirent: DirEntry("./src"), depth: 0 }
EntryIterator { dirent: DirEntry("./src/lib.rs"), depth: 1 }
EntryIterator { dirent: DirEntry("./tests"), depth: 0 }
EntryIterator { dirent: DirEntry("./tests/walkdir.rs"), depth: 1 }
EntryIterator { dirent: DirEntry("./Cargo.lock"), depth: 0 }
EntryIterator { dirent: DirEntry("./Cargo.toml"), depth: 0 }
EntryIterator { dirent: DirEntry("./README.md"), depth: 0 }