gpt4 book ai didi

c++ - 使用 libarchive 将 gzip 文件解压到内存

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:03:55 31 4
gpt4 key购买 nike

我正在尝试以编程方式将 gzip 文件解压缩到内存中,并使用 libarchive project 模拟命令 gzip -d file.gz .该文件实际上取自具有以下 header 的 http 响应 Accept-Encoding: gzip, deflate

这是我尝试读取文件的尝试。我不希望无法工作,因为 gzip 文件没有条目(它被压缩为流)并且 archive_read_next_header 试图从 arcihve 中读取下一个文件。

除了此功能之外,还有其他方法可以从压缩文件中提取全部数据。

archive_read_support_format_raw(archive); 
archive_read_support_filter_all(archive);
archive_read_support_compression_all(archive)

archive_read_open_memory(archive, file_data, file_size);
struct archive_entry *entry;
la_ssize_t total, size;
char *buf;
int status = archive_read_next_header(archive, &entry);

也许有人可以发布解决此问题的最小代码示例?另外,是否有一个选项可以查明 gzip 存档文件是否有条目?

最佳答案

一种可能的替代方法是使用 boost::iostreams 库,它带有一个内置的 gzip 过滤器,并允许您真正想要的 - 从内存中的 gzip 文件流式解压缩。这是对 gzip filter 的引用,以及相同的片段:

ifstream file("hello.gz", ios_base::in | ios_base::binary);
filtering_streambuf<input> in;
in.push(gzip_decompressor());
in.push(file);
boost::iostreams::copy(in, cout);

编辑:实际上这里有一个更好的片段 https://stackoverflow.com/a/16693807/3656081

关于c++ - 使用 libarchive 将 gzip 文件解压到内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54285820/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com