微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

压缩和解压 tar.gz 文件

如何解决压缩和解压 tar.gz 文件

我正在尝试将目录压缩为 tar.gz 文件,并在使用 Rust 后对其进行解压缩。 我正在使用板条箱 tar = "0.4.35"flate2 = "1.0.20"。我使用的是 Windows。

我的代码几乎与示例 here 相同。

let tar = File::create("a.tar.gz").unwrap();
let enc = GzEncoder::new(tar,Compression::default());
let mut a = tar::Builder::new(enc);
a.append_dir_all("","in").unwrap();
let tar = File::open("a.tar.gz").unwrap();
let dec = GzDecoder::new(tar);
let mut a = Archive::new(dec);
a.unpack("out").unwrap();

解压时总是报错: thread 'main' panicked at 'called Result::unwrap() on an 错误value: Custom { kind: InvalidInput,error: TarError { desc: "Failed to iterate over archive",io: Custom { kind: InvalidInput,error: "invalid gzip header" } } }',src\main.rs:21:26

我可以毫无问题地在 7-Zip 中打开生成tar.gz。 我做错了什么还是板条箱有问题?

解决方法

我发现了问题!

显然在 flate2 中有读写编码器和解码器。它们都具有相同的名称,因此您在导入时无法轻松区分它们。你必须小心导入正确的,否则你会得到奇怪的错误。

在我的示例中,我必须导入:

use flate2::write::{GzEncoder};
use flate2::read::{GzDecoder};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。