[英]Using zlib with C
我目前正在学习C,并且在尝试制作一个使用zlib的小程序时遇到一些问题。
我已经设法使用zlib库编译了我的应用程序(使用Codeblocks / MinGW),并且编译正常。 我使用了一个基于官方zlib站点(zlib.net)上的zpipe.c示例的示例。
执行后,将创建输出zip文件,但该文件似乎格式错误和/或为空。 我无法使用7zip打开它。
这是我修改过的代码。 我已经简单地替换了zpipe.c中的main()函数。
int main() {
printf("Compression test...");
int ret;
FILE *fpsource;
FILE *fpdest;
fpsource = fopen("test.txt", "rb");
fpdest = fopen("output.zip", "wb");
ret = def(fpsource, fpdest, Z_DEFAULT_COMPRESSION);
if (ret != Z_OK) {
printf("failure\n");
zerr(ret);
}
else {
printf("success..\n");
}
fclose(fpsource);
fclose(fpdest);
return EXIT_SUCCESS;
}
我没有收到任何错误,并且打印了“成功”消息。 只是输出文件已损坏。
讨论的代码仅使用DEFLATE算法压缩文件。 缺少使其成为zip或gzip文件的适当结构。
zpipe.c会按原样生成zlib格式,即打包在zlib标头和尾部中的原始deflate数据。 7zip无法识别。 它将识别gzip或zip格式,它们是相同原始deflate数据上完全不同的包装器。
您可以修改zpipe.c以使用deflateInit2(和inflateInit2)代替不带“ 2”的版本,以选择gzip格式而不是zlib格式。 您可以阅读zlib.h了解如何执行此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.