#file-path #trie #node #tree #directory #recursion

fs-tree

基于文件系统操作的API的文件系统路径Trie

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文件系统

Download history 111/week @ 2024-04-22 169/week @ 2024-04-29 86/week @ 2024-05-06 101/week @ 2024-05-13 208/week @ 2024-05-20 56/week @ 2024-05-27 114/week @ 2024-06-03 60/week @ 2024-06-10 39/week @ 2024-06-17 100/week @ 2024-06-24 34/week @ 2024-07-01 58/week @ 2024-07-08 127/week @ 2024-07-15 96/week @ 2024-07-22 199/week @ 2024-07-29 92/week @ 2024-08-05

516 每月下载量

MIT 许可证

61KB
948

fs-tree

FsTree 是一个针对文件系统操作的API的路径 Trie

说明

  1. Unix 仅限。
  2. 此包在 0.1.3 之后转移,并更改了其目的。
  3. 此包将“文件系统树”作为递归遍历文件所得到的结果
    • 如果你尝试遍历一个单独的文件,你会得到一个节点。
    • 如果你尝试遍历目录,你可能会得到一个大的子树(节点)。
    • 这与底层文件系统无关(与 ext4btrfs 无关)。
  4. 如果你之前还没有遇到过,请查看 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_atFsTree::symlink_read_at)。

构建 FsTree 的方法

  1. 从路径读取节点/树。 (FsTree::symlink_read_at)
  2. 声明一个 FsTree 文字面量。(tree!
  3. 将每个节点插入到空文件夹中。(FsTree::new_dir + FsTree::insert
  4. 从路径文本段中解析。(FsTree::from_path_text

你可以用 FsTree 做什么

  1. 遍历、查询和修改它。
  2. 与另一个树合并。(FsTree::try_merge
  3. 将其写入磁盘。(FsTree::write_at
  4. 尝试从路径中加载其结构副本。(FsTree::read_copy_at
  5. (待办)与另一个 FsTree 比较,生成 DiffTree。
  6. (待办)添加条目 API。

迭代器

iter 模块 中查看文档。

替代方案

  • crate walkdir - 如果你只需要迭代文件系统树。
  • crate file_type_enum - 如果你想要一个浅类型枚举。
  • crate build-fs-tree - 如果你需要从 YAML 文件创建文件系统树。

依赖关系

~105KB