2

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

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

4

2 回答 2

4

所讨论的代码只是使用 DEFLATE 算法压缩文件。缺少使其成为 zip 或 gzip 文件的适当结构。

于 2012-06-21T11:57:32.103 回答
4

zpipe.c 将按原样生成 zlib 格式,它是包装在 zlib 标头和尾标中的原始 deflate 数据。7zip 无法识别。它将识别 gzip 或 zip 格式,它们是相同原始 deflate 数据的完全不同的包装器。

您可以修改 zpipe.c 以使用 deflateInit2(和 inflateInit2)而不是没有“2”的版本来选择 gzip 格式而不是 zlib 格式。您可以阅读zlib.h以了解如何执行此操作。

于 2012-06-21T15:51:23.417 回答