Compresser un fichier en gzip à partir de code C ?

Compresser un fichier en gzip à partir de code C ? - C++ - Programmation

Marsh Posté le 29-07-2002 à 15:30:36    

Comment faire pour éxécuter le plus proprement possible une compression gzip à partir d'un code C ? Est-ce qu'on a un retour pour savoir si celle-ci s'est bien déroulé ?
Merci

Reply

Marsh Posté le 29-07-2002 à 15:30:36   

Reply

Marsh Posté le 29-07-2002 à 15:39:36    

Reply

Marsh Posté le 29-07-2002 à 15:41:32    

Si le code est bien écrit, on doit pouvoir le savoir !! C'est au développeur de le gérer.
 
Cf http://www.gnu.org/software/gzip/gzip.html (par google)
 
dont http://www.gzip.org/#sources

Reply

Marsh Posté le 29-07-2002 à 15:42:50    

Je pense avoir mal lu :pt1cable:. C'est pour lancer gzip.exe par shell à partir d'un code perso ?

Reply

Marsh Posté le 29-07-2002 à 15:43:55    

ct une pub perso, parce que je vois pas bien le rapport...

Reply

Marsh Posté le 29-07-2002 à 15:49:05    

carbon_14 : ouaip ce serait pour lancer gzip à partir d'un code C perso.
Y'a t-il un moyen propre de le faire (c plutôt déconseillé d'appeler un éxécutable à partir d'un autre...)

Reply

Marsh Posté le 29-07-2002 à 15:51:05    

Poulou a écrit a écrit :

carbon_14 : ouaip ce serait pour lancer gzip à partir d'un code C perso.
Y'a t-il un moyen propre de le faire (c plutôt déconseillé d'appeler un éxécutable à partir d'un autre...)




 
 
system("gzip" );
 
System doit renvoyer la valeur de retour de gzip si je me souvient bien, donc 0 si tout c bien passé.
 


---------------
Le Tyran
Reply

Marsh Posté le 29-07-2002 à 15:56:30    

Ben sinon il y a la zlib qui existe et qui ne doit pas être trop difficile à utiliser.
Je l'utilise mais pas sur des fichiers mais il me semble qu'il y a les fonction nécessaires... oui oui elles y sont !!!

Reply

Marsh Posté le 29-07-2002 à 16:05:51    

BB138 a écrit a écrit :

Ben sinon il y a la zlib qui existe et qui ne doit pas être trop difficile à utiliser.
Je l'utilise mais pas sur des fichiers mais il me semble qu'il y a les fonction nécessaires... oui oui elles y sont !!!




 
Heu si, c une usine à gaz :D
 
T'aurais pas qq bon tutauriaux ?


Message édité par LetoII le 29-07-2002 à 16:06:24

---------------
Le Tyran
Reply

Marsh Posté le 29-07-2002 à 16:27:13    

Désolé pour les tutoriaux, je n'en ai pas... j'ai fait avec la documentation des fonctions et comme pour l'instant je n'utilise que compress() et uncompress() je n'ai pas eu trop de soucis...

Reply

Marsh Posté le 29-07-2002 à 16:27:13   

Reply

Marsh Posté le 29-07-2002 à 16:28:09    

Les fonctions de zlib sont sur http://www.gzip.org/zlib/manual.html

Reply

Marsh Posté le 06-09-2005 à 02:29:39    

bb138 a écrit :

Désolé pour les tutoriaux, je n'en ai pas... j'ai fait avec la documentation des fonctions et comme pour l'instant je n'utilise que compress() et uncompress() je n'ai pas eu trop de soucis...


Je déterre cette vieille discussion ^^,  
j'essaie d'utiliser la zlib et plus particulièrement la fonction uncompress() sans grand succès...
Le prototype est :

Code :
  1. int uncompress (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);


et moi j'utilise en gros

Code :
  1. u_char *payload;
  2. // payload = les données compressées
  3. unsigned long ldestination = 10000 ;
  4. unsigned char destination[ldestination] ; // pas bo mais c'est pour tester
  5. cout << uncompress (destination, &ldestination, payload, ldestination ) ;  // là ça m'affiche -3 ("erreur de donnée" )
  6. cout << destination << endl ; // et là évidemment ça m'affiche n'importe quoi


Je suis sur (ou presque) de la variable 'payload', je pense que je me goure dans les paramètres mais où? ... Quelqu'un a un exemple d'utilisation ? si quelqu'un voit l'erreur ou a une indic, qu'il n'hésite pas !  :)

Reply

Marsh Posté le 06-09-2005 à 08:47:17    

:hello:  
Les paramètres sont peut-être bons, car le programme ne plante pas, et le code d'erreur ne concerne pas les paramètres. Le code d'erreur semble plutôt indiquer que le format des données à décompresser n'est pas le bon.
 
Il est spécifié dans la doc sur http://www.gzip.org/zlib/manual.html

Citation :

The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files rfc1950.txt (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).

Il existe bien d'autres formats.
 
Connais-tu les premiers octets du fichier à décompresser ?
 
Si les deux premiers octets sont "PK", le fichier ne pourra pas être décompressé par zlib, car "PK" (initiales du regretté Phil Katz, mort le 14 avril 2000, à l'age de 37 ans) identifie un fichier PKziped qui n'est pas traité par zlib, ce qui est dommage car le format PKZip est utilisé dans près de 90 pourcent des cas sous Windows.

Reply

Marsh Posté le 06-09-2005 à 17:08:39    


En fait j'essaie de lire une page HTML, un des paramètres du serveur est : "Content-Encoding: gzip"
donc la trame qu'il envoie est compressée. Ethereal arrive bien à la lire mais mon programme ... :non:
 
Ethereal m'affiche "............[o.8.." pour les premiers octets, donc je pense que la zlib devrait pouvoir décoder.  :sarcastic:  
 
Tiens je viens de me rendre compte que les premiers messages de la trame non compressés ne s'affichent pas (comme "Server: Apache/2.0.54 (Unix) PHP/4.3.11" par exemple), mon problème ne vient pas de zlib  :sweat: , je vais enquêter, je reviens  :bounce:

Reply

Marsh Posté le 06-09-2005 à 20:12:34    

Déjà, si tu appelais ta fonction correctement...

Reply

Marsh Posté le 06-09-2005 à 21:41:24    

Je t'en prie ne fais pas le timide...

Reply

Marsh Posté le 07-09-2005 à 10:40:47    

yolanc a écrit :


int uncompress (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);
 
...
 
cout << uncompress (destination, &ldestination, payload, ldestination ) ;  // là ça m'affiche -3 ("erreur de donnée" )


 
:??:


---------------
-( BlackGoddess )-
Reply

Sujets relatifs:

Leave a Replay

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