c++ - C++ 中的 ZLib 解压缩

标签 c++ zlib compression gzip

我正在尝试获取一个函数来解压缩用 .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/

相关文章:

c - ZLib示例代码编译报错LNK2019

c++ - 获取二叉树的高度时出现堆栈溢出异常

c++ - sizeof() 和构造函数/非构造函数中的模板参数

java - 你能在一个进程中在 JNI 中创建多个 JVM 吗?

c++ - zlib 部署破坏了 Ubuntu

python - zlib解压后得到与原文件不同的大小

scala - 在 Databricks 上使用 Scala Spark 加载 Z 压缩文件

compression - Sitecore 'getMediaStream' 无法正常工作

c++ - libcurl 内置压缩支持与否

c++ - 变量的浅蓝色突出显示