我目前正在学习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;
}
我没有收到任何错误,并打印出“成功”消息。这只是输出文件已损坏。
答案 0 :(得分:4)
讨论的代码只是使用DEFLATE算法压缩文件。缺少使其成为zip或gzip文件的适当结构。
答案 1 :(得分:3)
zpipe.c as-is将生成zlib格式,这是包含在zlib头和尾部中的原始deflate数据。 7zip不会认识到这一点。它将识别gzip或zip格式,它们是相同原始deflate数据的完全不同的包装器。
您可以修改zpipe.c以使用deflateInit2(和inflateInit2)而不是没有“2”的版本来选择gzip格式而不是zlib格式。您可以阅读zlib.h了解如何执行此操作。