【发布时间】:2019-01-21 08:18:43
【问题描述】:
我正在尝试以编程方式将 gzip 文件解压缩到内存中,并使用 libarchive project 模拟命令 gzip -d file.gz。
该文件实际上取自http响应,带有以下标头Accept-Encoding: gzip, deflate
这是我读取文件的尝试。我不希望它不起作用,因为 gzip 压缩的文件没有条目(它被压缩为流)并且archive_read_next_header 尝试从存档中读取下一个文件。
这个函数有什么替代方法可以从压缩文件中提取整个数据。
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 存档文件是否有条目?
【问题讨论】:
-
gzip 不是 归档 格式。您应该寻找一个纯 gzip 或压缩库,
libarchive期望(顾名思义)一个存档。 -
@tkausl,感谢您清除此问题。也许您详细说明了 gzip 和另一种支持归档的压缩算法之间的区别?此外,您能否推荐支持 gzip 解压缩的最小、临时和无错误库(我已经检查过 boost,但我希望避免对 boost 的整个逻辑进行大规模部署)
-
要解压文件,ala
gzip -d file.gz,使用 libz 做你想做的事。 -
Perhaps you elaborate about the difference between gzip and another compression algorithm that support archiving?例如哪个?如果你想到tar.gz,它实际上是一个 tar 存档,它对压缩一无所知,用 gzip 压缩,它对存档一无所知。 -
是的,.tar.gz 是一个 gzip 压缩的 .tar 存档,但是您可以 gzip 任何东西,因此 .gz 文件不一定也是一个存档。
标签: c++ c gzip deflate libarchive