如何使用zlib轻松压缩和解压文件?

14

如何使用zlib轻松压缩和解压文件?


你读过zlib文档吗?如果是的,你尝试过什么?如果你尝试的方法不起作用,那么请发出你的代码并说明发生了什么。 - Mark Adler
3个回答

18

用于解压缩:

char buf[1024*1024*16];
gzFile *fi = (gzFile *)gzopen("file.gz","rb");
gzrewind(fi);
while(!gzeof(fi))
{
    int len = gzread(fi,buf,sizeof(buf));
        //buf contains len bytes of decompressed data
}
gzclose(fi);

压缩

gzFile *fi = (gzFile *)gzopen("file.gz","wb");
gzwrite(fi,"my decompressed data",strlen("my decompressed data"));
gzclose(fi);

@Cristi:我遇到了一个错误:在这一行出现了main.cpp invalid conversion from const void*' to void*' 的问题:gzwrite(fi,"my decompressed data",strlen("my decompressed data"));。你能帮我看看吗? - Datoxalas
尝试使用gzwrite(fi,(void const *)“我的解压数据”,strlen(“我的解压数据”))将数据写入文件。 - Cristi
@Cristi:我也遇到了同样的错误。 - Datoxalas
1
@Cristi:现在我收到了这个错误:[链接器错误] 对 'gzopen' 未定义的引用 - Datoxalas
@Cristi:好的,现在压缩正在工作,但解压缩不行。出现了“error C3861: 'gzrewind': identifier not found”和“error C3861: 'gzeof': identifier not found”的错误。 - Datoxalas
显示剩余6条评论

1
请仔细阅读此内容。信息已经在这里提供:
即使在谷歌上,这也是第一个显示的链接。

3
我觉得文档不太容易理解。有没有像compress()和decompress()这样简单的函数? - Datoxalas
1
@Downvoter:可以解释一下为什么要点踩吗?原帖中并没有提到作者不理解 zlib 网站上的示例。我只是提供了链接,有什么问题吗? - Alok Save
1
我认为在SO上问这样问题的人很明显已经阅读了文档,但仍需要帮助。我发现zlib的“示例”对我来说并不是很有帮助,因为我们大多数人并不是试图解压stdin。 - osirisgothra
@Datoxalas 是的,zlib 提供了 compress()uncompress() 函数。你有看过文档吗? - Mark Adler

-1
如果您可以使用 boost 库,我建议使用 boost iostreams API。请参阅 boost iostreams 教程。它支持 GZIP 和 BZIP2 的压缩和解压缩。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接