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

时间:2014-05-30 20:19:13

标签: c++ gzip compression

我用它来解压缩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;
}

1 个答案:

答案 0 :(得分:2)

gzreadfread的工作方式相同。对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;
}