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