C++中的ZLib解压

Rob*_*ood 5 c++ compression gzip zlib

我试图获得一个函数来解压缩一个用 .gz 压缩的文本文件。它需要解压缩给定路径的 .gz 文件并写入给定目的地的未压缩文本文件。我正在使用 C++,我所看到的是 ZLIB 完全符合我的需要,除了我无法在网络上的任何地方找到 1 个显示它这样做的示例。任何人都可以向我展示一个例子或至少指导我朝着正确的方向前进吗?

Mic*_*ael 5

如果您只想使用原始压缩数据(即没有存档)来扩充文件,您可以使用以下内容:

gzFile inFileZ = gzopen(fileName, "rb");
if (inFileZ == NULL) {
    printf("Error: Failed to gzopen %s\n", filename);
    exit(0);
}
unsigned char unzipBuffer[8192];
unsigned int unzippedBytes;
std::vector<unsigned char> unzippedData;
while (true) {
    unzippedBytes = gzread(inFileZ, unzipBuffer, 8192);
    if (unzippedBytes > 0) {
        unzippedData.insert(unzippedData.end(), unzipBuffer, unzipBuffer + unzippedBytes);
    } else {
        break;
    }
}
gzclose(inFileZ);
Run Code Online (Sandbox Code Playgroud)

unzippedData向量现在包含您膨胀的数据。可能有更有效的方法来存储膨胀的数据,特别是如果您事先知道未压缩的大小,但这种方法对我有用。
如果您只想将膨胀的数据保存到文件而不进行任何进一步处理,您可以跳过向量并将unzipBuffer内容写入另一个文件。


Fem*_*emi -1

啊,我假设http://zlib.net/zlib_how.html能满足你的要求?