2010-07-16 10 views
1

EDITPourquoi ai-je un ferror sur mon fichier source en utilisant zlib deflate?

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

écrire dans le fichier, alors besoin zipper.

ouverture d'un fichier .z, puis en appelant 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"); 

utilisant def(), dès le site:

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 est non nulle, strm.avail_in = 16343, in a les données mais ferror(source) renvoie 32?

EDIT - Aussi strm.avail_in = 16343 a attiré mon attention comme CHUNK = 16384 .... est-ce OK?

Toutes les idées ou l'aide est appréciée.

Merci.

+1

Je ne sais pas ce que 32 est. Essayez [perror] (http://www.opengroup.org/onlinepubs/000095399/functions/perror.html) pour imprimer le texte d'erreur. –

+0

Quelle est la signification de errno 32 sur votre plate-forme, pourriez-vous perror ("") il? Sur linux, il est écrit "broken pipe", ce qui semble étrange vu que vous avez ouvert un fichier. – mvds

+0

peut-être juste montrer comment vous ouvrez la source, c'est votre problème alors pourquoi devrions-nous supposer ou deviner? – mvds

Répondre

2

Vous devez ouvrir le fichier en mode binaire au lieu du mode texte:

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

Merci, j'ai essayé, la même erreur et l'état des variables ... –

+1

Vos noms de variables sont un peu confus, 'outfilefd' est en fait le fichier d'entrée - quel mode avez-vous ouvert cela? – nos

+0

"w + t" ... essayé "b" pas de chance –