13个不稳定版本 (4个破坏性更新)
0.5.5 | 2023年10月3日 |
---|---|
0.5.4 | 2023年10月3日 |
0.4.0 | 2023年9月27日 |
0.3.0 | 2023年9月22日 |
0.1.1 | 2020年2月14日 |
#218 在 文件系统
516 每月下载量
61KB
948 行
fs-tree
FsTree
是一个针对文件系统操作的API的路径 Trie。
说明
- Unix 仅限。
- 此包在
0.1.3
之后转移,并更改了其目的。 - 此包将“文件系统树”作为递归遍历文件所得到的结果
- 如果你尝试遍历一个单独的文件,你会得到一个节点。
- 如果你尝试遍历目录,你可能会得到一个大的子树(节点)。
- 这与底层文件系统无关(与
ext4
或btrfs
无关)。
- 如果你之前还没有遇到过,请查看 Trie。
树布局
FsTree
是一个包含三种可能文件类型的节点
use std::{collections::BTreeMap, path::PathBuf};
pub enum FsTree {
Regular,
Directory(TrieMap), // Recursive part
Symlink(PathBuf),
}
// ↓↓
pub type TrieMap = BTreeMap<PathBuf, FsTree>; // Recursive part
FsTree
的根是 未命名的(没有文件名/路径),到子节点的“边”是相对路径。
陷阱警告
与 std
函数一样,此包中的函数会遵循符号链接(和符号链接链),因此你永远不会在你的树中得到 FsTree::Symlink(_)
!如果你想有符号链接感知性,请使用带有 symlink
前缀的函数版本(FsTree::read_at
与 FsTree::symlink_read_at
)。
构建 FsTree
的方法
- 从路径读取节点/树。 (
FsTree::symlink_read_at
) - 声明一个
FsTree
文字面量。(tree!
) - 将每个节点插入到空文件夹中。(
FsTree::new_dir
+FsTree::insert
) - 从路径文本段中解析。(
FsTree::from_path_text
)
你可以用 FsTree
做什么
- 遍历、查询和修改它。
- 与另一个树合并。(
FsTree::try_merge
) - 将其写入磁盘。(
FsTree::write_at
) - 尝试从路径中加载其结构副本。(
FsTree::read_copy_at
) - (待办)与另一个
FsTree
比较,生成 DiffTree。 - (待办)添加条目 API。
迭代器
在 iter
模块 中查看文档。
替代方案
- crate
walkdir
- 如果你只需要迭代文件系统树。 - crate
file_type_enum
- 如果你想要一个浅类型枚举。 - crate
build-fs-tree
- 如果你需要从 YAML 文件创建文件系统树。- 我们最近得到的是使用
tree!
创建树文字面量,并使用FsTree::write_at
写入。
- 我们最近得到的是使用
依赖关系
~105KB