16 个版本 (7 个破坏性更新)
0.8.0 | 2021 年 9 月 4 日 |
---|---|
0.7.1 | 2021 年 4 月 27 日 |
0.6.1 | 2021 年 4 月 13 日 |
0.5.0 | 2021 年 4 月 12 日 |
0.1.3 | 2021 年 2 月 20 日 |
#1025 in 文件系统
83KB
1.5K SLoC
一个使用 Snappy 压缩归档文件夹的归档器,并从文件的元数据中计算 128 位哈希。
读取实际文件不需要计算哈希。哈希算法是 MetroHash。
它是 Dochy 文件系统的一个组件。
fn main() -> ArcResult<()>{
let mut buf: Vec<u8> = vec![];
let r = create_archive_from_directory(
"foo/some_dir_path", &mut buf,
|hash| {
//No files are modified when the same hash already exists,
//so you can safely cancel the archiving process
Path::new("bar/some_dir2").join(format!("{}", hash)).exists()
}, &ArchiveOptions::new())?;
let path = match r{
CreateArchiveFromDirectory::WrittenSuccessfully(_size, hash) =>{
let path = Path::new("bar/some_dir2").join(format!("{}", hash));
//save the hash and the archived data
let mut file = File::create(path)?;
file.write_all(&buf);
path
},
CreateArchiveFromDirectory::Canceled(hash) =>{
Path::new("bar/some_dir2").join(format!("{}", hash));
}
};
//archive file exists either way
let mut archive_file = File::open(path)?;
let archive_data = read_archive_data(&mut archive_file)?;
//resume the archive to the target directory
resume_archive("baz/target_dir", &archive_data, true)?;
Ok(())
}
变更日志
0.3.2 & 0.3.3
- 修复了 readme。
0.3.1
- 修复了 0.3.0 中的错误,并再次更改了一些函数的签名。
0.3.0
- 添加了文档。
- 更改了许多公共函数的签名,并隐藏了一些实现细节。
0.2.0
- 完全重写,现在这个库可以作为通用归档器使用
0.1.3
- 更新了 readme
依赖
~2.5–3.5MB
~60K SLoC