将zlib与C一起使用

时间:2012-06-21 11:33:55

标签: c zlib

我目前正在学习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;
}

我没有收到任何错误,并打印出“成功”消息。这只是输出文件已损坏。

2 个答案:

答案 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了解如何执行此操作。