5

I am trying to get a function going to unzip a single text file compressed with .gz. It needs to uncompress the .gz file given its path and write the uncompressed text file given its destination. I am using C++ and what I have seen is that ZLIB does exactly what I need except I cannot find 1 single example anywhere on the net that shows it doing this. Can anyone show me an example or at least guide me in the right direction?

4

4 回答 4

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

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

于 2013-06-12T09:27:59.307 回答
2

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

于 2013-06-12T05:05:17.683 回答
1

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

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

于 2015-08-16T18:59:00.230 回答
0

啊,我假设http://zlib.net/zlib_how.html做你想要的?

于 2013-06-12T03:45:13.017 回答