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, 二进制数据处理, 可视化界面, 学习项目, 文件归档, 网络流量审计, 通知系统