ZLib在C ++中的解压缩

时间:2013-06-12 03:31:33

标签: c++ zlib compression gz

我试图让一个函数解压缩一个用.gz压缩的文本文件。它需要在给定其路径的情况下解压缩.gz文件,并在给定其目标的情况下写入未压缩的文本文件。我正在使用C ++,我所看到的是ZLIB正是我所需要的,除了我在网上的任何地方都找不到一个显示它这样做的例子。任何人都可以向我展示一个例子,或者至少引导我朝着正确的方向前进吗?

4 个答案:

答案 0 :(得分:3)

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

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);

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

答案 1 :(得分:1)

你可以使用gzopen(), gzread(), and gzclose() functions of zlib,就像你对应的stdio函数fopen()一样。这将读取gzip文件并解压缩。然后,您可以使用fopen()fwrite()等将未压缩的数据写回。

答案 2 :(得分:0)

啊,我会假设http://zlib.net/zlib_how.html符合您的要求?

答案 3 :(得分:0)

您可以使用ZLibComplete执行此操作。在GZip解压缩的首页上有一个完整的C ++示例。

http://rudi-cilibrasi.github.io/zlibcomplete/