所以我在Ubuntu上使用zlib包。我正试图找出如何正确使用gzopen和gzread,这就是我目前所拥有的

#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <zlib.h>

#define NUM_BUFFERS 8
#define BUFFER_LENGTH 1024

char buf[BUFFER_LENGTH];
int main(int argc, const char* argv[])
{
    int status;
    gzFile file;
    file = gzopen("beowulf.txt", "w");
    int counter = 0; /*when the counter reachers BUFFERS_FULL, stop*/
    if(file == NULL)
    {
        printf("COULD NOT OPEN FILE\n");
        return 1;
    }
    while(counter < NUM_BUFFERS)
    {
        status = gzread(file, buf, BUFFER_LENGTH - 2);
        printf("STATUS: %d\n", status);
        buf[BUFFER_LENGTH - 1] = "\0";
        printf("%s\n", buf);
        counter++;
    }
    gzclose(file);
    printf("STATUS: %d\n", status);
    return 0;
}

gzread("STATUS: %d\n",status);返回-2,我不知道为什么。任何帮助都将不胜感激。

最佳答案

模式"w"表示您正在准备创建新存档:

file = gzopen("beowulf.txt", "w");

您刚刚将文件长度截断为零。
此外,还应使用二进制模式标志:"wb""rb"
另外,假设的.gz归档文件有一个扩展名.txt,这有点奇怪。
阅读docs,docs规则。:)

关于c - zlib,c和gzread,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12458711/

10-09 03:14