读取.gz文件时出现zlib gzread函数错误?

时间:2017-05-15 08:07:59

标签: c++ c gzip zlib

像标题一样,这是我的代码:

int decompress_one_file(char *infilename, char *outfilename)
{
    gzFile infile = gzopen(infilename, "rb");
    FILE *outfile = fopen(outfilename, "wb");
    if (!infile || !outfile) return -1;

    char buffer[128] = {NULL};
    int num_read = 0;
    num_read = gzread(infile, buffer, sizeof(buffer)); // crash here
    while (num_read > 0) {
        fwrite(buffer, 1, num_read, outfile);
    }

    gzclose(infile);
    fclose(outfile);
    return 0;
}

当我的控制台应用程序运行到gzread()时,崩溃,我不知道这是什么类型的错误? zlib version: 1.2.11

更新压缩功能:

int compress_one_file(char *infilename, char *outfilename)
{
    FILE *infile = fopen(infilename, "rb");
    gzFile outfile = gzopen(outfilename, "wb");
    if (!infile || !outfile) return -1;

    char inbuffer[128] = {NULL};
    int num_read = 0;
    unsigned long total_read = 0, total_wrote = 0;
    while ((num_read = fread(inbuffer, 1, sizeof(inbuffer), infile)) > 0) {
        total_read += num_read;
        gzwrite(outfile, inbuffer, num_read);
    }
    fclose(infile);
    gzclose(outfile);
    return 0;
}

显示错误:

error windows

有人对这个错误有所了解吗?

1 个答案:

答案 0 :(得分:0)

我检查过它在我的工作站上工作正常。可能在这里是一个gzipped文件的问题? 你能展示一个崩溃的文件吗?

但无论如何你有一个fwrite的无限循环:

int num_read = 0;
while ((num_read = gzread(infile, buffer, sizeof(buffer))) > 0) {
    while (num_read > 0) {
        num_read -= fwrite(buffer, 1, num_read, outfile);
    }   
}