【问题标题】:C/C++ Arbitrary output size when decompressing GZIPC/C++ 解压 GZIP 时的任意输出大小
【发布时间】:2014-05-30 20:19:13
【问题描述】:

我正在使用它来将 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;
}

【问题讨论】:

    标签: c++ gzip compression


    【解决方案1】:

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多