c++ - 将 zlib 与 mingw 一起使用

标签 c++ zlib

我正在尝试使用 zlib 库读取 test.zip 文件并提取内容。我的要求是先读取每个文件并将内容(解压缩)输出到内存,然后再输出到文件。

我尝试了下面的代码:

#include <iostream>
#include <zlib.h>

using namespace std;


#define LINE 1024

int main()
{
    const char *filename = "hello.zip";
    gzFile inFileZ = gzopen(filename, "rb");
    if (inFileZ == NULL) {
        printf("Error: Failed to gzopen %s\n", filename);
        return -1;
    }
    unsigned char unzipBuffer[8192];
    unsigned int unzippedBytes;
    std::vector<unsigned char> unzippedData;
    while (true) {
        unzippedBytes = gzread(inFileZ, unzipBuffer, 8192);
        if (unzippedBytes > 0) {
            cout << unzippedBytes << endl;
            for (int i = 0; i < unzippedBytes; i++) {
                cout << unzipBuffer[i];
            }
        } else {
            break;
        }
    }
    gzclose(inFileZ);
    return 0;
}

我从网上得到了上面的例子。有人提到 gzread 会膨胀内容并填充缓冲区(这里是 unzipBuffer)。但是,当我尝试打印它时,它打印的是 .zip 文件的相同内容(例如 PK..... 代码不可读)。

我相信我没有正确使用 zlib 的 API。但是我找不到与此相关的示例。有人可以帮我吗?

最佳答案

zlib 库不直接处理 zip 格式。 zlib 提供处理压缩压缩条目所需的原始压缩和解压缩,以及 CRC-32 计算工具。但是,您需要编写自己的代码或使用其他库来解析和处理 zip 格式。

gzip 不是 zip。它们是两种完全不同的格式,它们使用或可能使用相同的原始压缩格式。

关于c++ - 将 zlib 与 mingw 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30648870/

相关文章:

C++ 将类成员动态定义为对象或对另一个成员的引用

c++ - 为什么在同一声明区域内的同名声明被拒绝?

c++ - 如何在 C++ 中使用抽象类指针 vector 实现缓存一致性?

Node.js:使用 zlib 压缩时定义刷新方法

c++ - 在 ubuntu 10.04 下安装最新的 1.44 boost 库

c++ - 是否可以忽略 UnMapViewOFFile() 的错误 487 (ERROR_INVALID_ADDRESS)?

c++ - 使用 numa_alloc_onnode() 分配小块有限制吗?

ios - Objective-C警告,使用未声明的标识符“new”

c - zlib/RFC1950 中的 FCHECK 如何工作?

java - ZLIB 流大型 csv 文件的意外结束