C/ c++解压GZIP时任意输出大小

C/C++ Arbitrary output size when decompressing GZIP

本文关键字:任意 输出 GZIP c++ 解压      更新时间:2023-10-16

我用它来解压缩GZIP压缩文件"input.gz"到未压缩的"output.file"。它工作得很好,只是我需要一个固定大小的缓冲区(在本例中为1MB),如果输出变大,字节就会被切断。是否有一种方法可以让它与任何输出大小一起工作?

#include "zlib.h"
#include <stdio.h>
int main()
{
    char buf[1024*1024];
    gzFile in = gzopen("input.gz","rb8");
    int len = gzread(in,buf,sizeof(buf));
    gzclose(in);
    FILE* out = fopen("output.file", "wb");
    fwrite(buf,1,len,out);
    fclose(out);
    free(buf);
    return 0;
}

gzread的工作方式与fread相同。连续呼叫gzread只是从该文件读取更多数据。我还没有测试代码,但这应该可以正常工作。

#include "zlib.h"
#include <stdio.h>
int main() {
    char buf[1024];
    gzFile in = gzopen("input.gz","rb8");
    FILE* out = fopen("output.file", "wb");
    while (int len = gzread(in, buf, sizeof(buf)))
        fwrite(buf, 1, len, out);
    gzclose(in);
    fclose(out);
    return 0;
}