Почему я получаю ferror в моем исходном файле, используя zlib deflate? - PullRequest
1 голос
/ 16 июля 2010

РЕДАКТИРОВАТЬ

  // open output file for writing
  if ( ( outfilefd = fopen( file_name, "w+t" ) ) == NULL )
    {
      fprintf(stderr, "Unable to create file\n");
      exit(1);
    }

Записать в файл, затем необходимо сжать его.

Открытие файла .z и затем вызов def ()

FILE *zipFile;

   if ( ( zipFile = fopen( "C:\\LOGS\\test.txt.z", "w+t" ) ) == NULL )
   {
         fprintf(stderr, "Unable to create file\n");
         exit(1);
   }



   int ret = def(outfilefd, zipFile, Z_DEFAULT_COMPRESSION);
        if (ret != Z_OK)
            printf("ZLIB Error");

с использованием def (), справа от сайта :

 int def(FILE *source, FILE *dest, int level)
    {
        int ret, flush;
        unsigned have;
        z_stream strm;
        unsigned char in[CHUNK];
        unsigned char out[CHUNK];

        /* allocate deflate state */
        strm.zalloc = Z_NULL;
        strm.zfree = Z_NULL;
        strm.opaque = Z_NULL;
        ret = deflateInit(&strm, level);
        if (ret != Z_OK)
            return ret;

        /* compress until end of file */
        do {

            strm.avail_in = fread(in, 1, CHUNK, source);
      int g = ferror(source);//<---------------- EROR HERE returning 32?
            if (ferror(source)) {
                (void)deflateEnd(&strm);
                return Z_ERRNO;
            }

zipFile не равно нулю, strm.avail_in = 16343, in имеет данныено ferror(source) возвращает 32?

РЕДАКТИРОВАТЬ - Также strm.avail_in = 16343 привлекло мое внимание как CHUNK = 16384 .... это нормально?

Любые идеи или помощь приветствуются.

Спасибо.

1 Ответ

2 голосов
/ 16 июля 2010

Вы должны открыть файл в двоичном режиме вместо текстового:

zipFile = fopen( "C:\\LOGS\\test.txt.z", "w+b" )
...