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?
问问题
23467 次
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++示例。
于 2015-08-16T18:59:00.230 回答
0
啊,我假设http://zlib.net/zlib_how.html做你想要的?
于 2013-06-12T03:45:13.017 回答