我正在尝试获取一个函数来解压缩用 .gz 压缩的单个文本文件。它需要在给定路径的情况下解压缩 .gz 文件,并在给定目标的情况下写入未压缩的文本文件。我正在使用 C++,我所看到的是 ZLIB 完全满足我的需要,除了我在网上找不到任何显示它这样做的 1 个示例。谁能给我举个例子,或者至少指导我朝着正确的方向前进?
最佳答案
如果你只是想用原始压缩数据扩充文件(即没有存档),你可以使用这样的东西:
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
vector 现在包含您的膨胀数据。可能有更有效的方法来存储膨胀的数据,特别是如果您事先知道未压缩的大小,但这种方法对我有用。
如果您只想将膨胀后的数据保存到一个文件中而不进行任何进一步处理,您可以跳过 vector 并将 unzipBuffer
内容写入另一个文件。
关于c++ - C++ 中的 ZLib 解压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17057264/