Expand description
把一个目录打包成容器载荷。
§为什么这一层在 core 而不在各前端里
CLI 早先自己实现了这套遍历逻辑,GUI 要做文件夹加密时面临选择: 复制一份,还是提上来共享。复制的代价不是多写几行,而是两份实现 迟早分歧——比如哪天给 CLI 修了「跳过符号链接」的处理,GUI 那份 还在按老样子打包,用户在两个入口得到不同的容器。
core 里已经有 crate::fsatomic 在做文件系统操作,所以放这里
与既有边界一致。
§为什么不用 walkdir
core 的依赖目前只有密码学与格式相关的几个 crate,保持这份克制是
有价值的:它让 core 能被任意项目复用,也让审计面更小。
目录遍历用 std::fs 手写一个显式栈就够了,不值得为此引入新依赖。
手写还有个额外好处:递归深度可控。walkdir 默认无限深,
遇到深层嵌套目录时 CLI 那份实现是靠运气不炸;这里显式设了上限。
§顺序必须稳定
条目按路径排序后写入。这不是美观问题——索引里记的是每个文件在 载荷中的区间,遍历顺序变了,同一个目录两次打包会得到不同的 布局。稳定顺序让「同样的输入产出同样的容器」成立,便于校验。
Structs§
- Pack
Plan - 流式打包的计划:遍历一遍目录,只取大小,不读内容。
- Pack
Reader - 把规划里的文件内容按顺序串成一条
Read流,并逐文件计算哈希。 - Packed
Folder - 打包结果。
- Skipped
Entry - 打包过程中跳过的条目。
- Walk
Item - 遍历时交给回调的一个条目。
Enums§
- Skip
Reason - 跳过原因。
Constants§
- MAX_
DEPTH - 目录递归深度上限。
Functions§
- pack_
folder - 把
root目录打包成容器载荷。 - plan_
folder - 规划流式打包。遍历判定与
pack_folder共用walk_dir。 - walk_
dir - 遍历目录树,对每个条目调用
visit。
Type Aliases§
- Progress
Fn - 遍历时可选的进度回调。