Compression avec zlib (ou libz au choix)

Compression avec zlib (ou libz au choix) - C++ - Programmation

Marsh Posté le 01-08-2002 à 17:49:37    

J'ai un fichier que je veux compresser avec la libz.
J'ai bien regarder la doc (http://www.gzip.org/zlib/manual.html) mais ça reste bien obscur !... N'y aurait-il pas quelque part un exemple de compression de fichier ?
Merci pour toute info

Reply

Marsh Posté le 01-08-2002 à 17:49:37   

Reply

Marsh Posté le 01-08-2002 à 17:55:00    

Rien que sur ma machine, j'ai un millier de logiciels libres installés qui utilisent la zlib. Des exemples, ça devrait se trouver...


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 01-08-2002 à 18:20:17    

heuh si normalement t'as l'exemple gzip
 
attends bouge pas

Reply

Marsh Posté le 01-08-2002 à 18:23:24    

Code :
  1. int zgCompress(IInputFlow *fileIn,IOutputFlow *fileOut,unsigned char cmpQuality)
  2. {
  3.     gzFile gzFileOut;
  4.     if (!fileIn || !fileOut)
  5.         return -1;
  6.     if (cmpQuality < 0 )
  7.         cmpQuality = 0;
  8.     if (cmpQuality>9)
  9.         cmpQuality=9;
  10.     char mode[5];
  11.     mode[0]='w';
  12.     mode[1]='b';
  13.     itoa(cmpQuality,mode+2,10);
  14.     gzFileOut = gzopen((IFlow *)fileOut, mode);
  15.     char * buf = new char [BUFLEN];
  16.     int len;
  17.    
  18.     while(1)
  19.     {
  20.         len = fileIn->read(buf,sizeof(buf));
  21.         if (len == 0)
  22.             break;
  23.        
  24.         if (gzwrite(gzFileOut, buf, (unsigned)len) != len)
  25.         {
  26.             delete []buf;
  27.             return -1;
  28.         }
  29.     }
  30.    
  31.     gzclose(gzFileOut);
  32.     delete []buf;
  33.     return 0;
  34. }


 
 
vala ca c'est le code que j'utilise pour compresser avec zlib
remplace les IxxFlow par des FILE et (normalement) c'est ok (enfin remplace les flow->read par des fread etc etc, hein ? )
 


Message édité par chrisbk le 01-08-2002 à 18:25:48
Reply

Marsh Posté le 01-08-2002 à 23:29:42    

Ok donc si je comprends bien il "suffit de" :

gzopen
gzwrite
gzclose


 
Merci en tt cas pour le code, je testerai ça demain. Par contre j'ai pas compris ton "remplace les IxxFlow par des FILE et (normalement) c'est ok (enfin remplace les flow->read par des fread etc etc, hein ? )" mais bon je devrais arriver à me débrouiller ! ;)

Reply

Marsh Posté le 02-08-2002 à 00:33:32    

ben les IFlow *  trucbidule c'est un machin a moi (j'ai du modif la zlib pour qu'elle prenne ca a la place des FILE *, c'est un exercice que je ne recommande a personne :D)
 
donc quand tu vois I**Flow tu met FILE et quand tu vois flow->read(truc,20); tu transforme en fread(truc,20,10,flow);
 
simple quoi :O :D

Reply

Marsh Posté le 02-08-2002 à 08:26:07    

ok
c'est ce que j'avais compris mais j'avoue que je comprenais pas le (IFlow *) en paramètre de gzopen ! Forcécemnt si on modifie les sources !... ;)
Par contre petite correction, 'gzopen' prend un 'const char *path' en paramètre. Si on veut un 'int fd' il faut utiliser 'gzdopen'. Voilà ct pour ceux que ça intéresse également
Merci bien en tt cas :)

Reply

Marsh Posté le 04-01-2005 à 20:30:36    

Désolé pour ce mega up, mais bon.
 
Je me demandais si je pouvais utiliser cette technique pour compresser un ensemble de fichier.
 
J'ai un vecteur d'ansistring qui contient les chemins d'accès à tout un ensemble de fichier. Et je voudrais faire un gros zip avec tous les fichiers dedans.
 
merci


---------------
Mon Blog : LeVeilleur.net | Hébergement d'images : Hostipics.net
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed