繁体   English   中英

在C中使用zlib

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM