Chinmay-Mahajan/Crust---A-Rust-Based-Basic-Archiver-

GitHub: Chinmay-Mahajan/Crust---A-Rust-Based-Basic-Archiver-

一个用 Rust 编写的教学型命令行归档工具,通过自定义二进制格式实现文件的打包与解包,帮助学习者掌握原始字节 I/O 和错误处理。

Stars: 0 | Forks: 0

# crust-archiver 一个用 Rust 编写的微型命令行归档工具,主要是为了让我能通过实践来真正理解二进制文件格式,而不是仅仅停留在阅读相关概念上。 它将一个文件夹中的文件打包成单个自定义的 `.crust` 归档文件,并可将该归档文件解包还原为文件夹。没有压缩,没有加密——只有我自己设计的一种简单的二进制布局:一个文件数量标头,随后是每个文件的元数据(名称长度、名称、大小),最后是首尾相连的原始文件内容。 ## 我为什么要制作这个 我想熟练掌握: - 在 Rust 中读/写原始字节(`u32`/`u16`/`u64` 大端序编码) - 自定义错误类型以及 `Result`/`?` 错误传播 - 不依赖现有归档 crate 的基本文件 I/O 它并不旨在与 `tar` 或 `zip` 竞争——它不进行任何压缩,尚不支持嵌套目录,并且其格式极其简单。把它看作是一个刚好能运行的学习练习。 ## 用法 ``` # 将目录打包为 archive cargo run -- pack # 将 archive 解包至目录 cargo run -- unpack ``` 示例: ``` cargo run -- pack ./my_folder ./backup.crust cargo run -- unpack ./backup.crust ./restored_folder ``` ## 格式的工作原理(概述) ``` [4 bytes] total file count (u32, big-endian) for each file: [2 bytes] filename length (u16) [N bytes] filename [8 bytes] file size (u64) then, for each file (same order): [file size bytes] raw file contents ``` ## 已知的局限性 - 仅打包目录顶层的文件——尚不支持递归进入子文件夹 - 没有压缩,因此归档文件通常会比原始文件的总和更大 - 打包时文件名作为完整路径存储,但解包时仅保留基本的文件名 - 尚未针对超大文件或奇怪的文件名进行真正测试,因此暂时不要用它处理任何重要内容 ## 可能的后续步骤 - 递归目录打包 - 也许会为每个文件添加校验和以捕获损坏 - 压缩(可能是目前最实用的缺失部分)
标签:Rust, 二进制数据处理, 可视化界面, 学习项目, 文件归档, 网络流量审计, 通知系统