zlib,c和gzread

Sam*_*m P 0 c zlib

所以我在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;
}
Run Code Online (Sandbox Code Playgroud)

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

atz*_*tzz 6

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

file = gzopen("beowulf.txt", "w");
Run Code Online (Sandbox Code Playgroud)

您刚刚将文件截断为零长度.

此外,您应该使用二进制模式标志:"wb""rb".

另外,你假设的.gz-archive有一个扩展名有点奇怪.txt.

阅读文档,文档规则.:)