COMPRESSION BZ2 (MIEUX QUE ZLIB) EN C.

Signaler
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
-
Messages postés
3
Date d'inscription
vendredi 28 juin 2013
Statut
Membre
Dernière intervention
4 mars 2015
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/20796-compression-bz2-mieux-que-zlib-en-c

Messages postés
3
Date d'inscription
vendredi 28 juin 2013
Statut
Membre
Dernière intervention
4 mars 2015

Bonjour, j'ai toujours cet erreur :
" 1>Stat_test.obj : error LNK2019: symbole externe non résolu _BZ2_bzWrite@16 référencé dans la fonction "public: int __thiscall CStat_test::compress_to_file(char *,char *,int)" (?compress_to_file@CStat_test@@QAEHPAD0H@Z) "
---------------------------
pouvez vous m'aidez? et merci d'avance :)
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
6
Il faut que tu créé un format d'assemblage de fichier et qu'au lieu de l'écrire avec la fonction write que tu utilise celle du BZ2.
Ca revient à créer un assembleur de fichier avec juste la fonction de lecture et d'écriture qui diffère.
Messages postés
3
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
10 mars 2008

Pas mal du tout !
Cependant j'ai une question :

Est il possible de compresser plusieurs fichiers en un
en améliorant ton code ?
Messages postés
3
Date d'inscription
lundi 9 février 2004
Statut
Membre
Dernière intervention
15 novembre 2004

bonjour,

Alors voici les corrections a apporter pour que le code soit correcte :
il faut remplacer tous les "int in, out;" par "unsigned int in, out;" .
et changer les options d'ouverture de fichier "r" et "w" en mode binaire par "rb" et "wb" dans toutes les fonctions.
Dans la fonction compress_to_file, remplacer "if(bzerr=BZ_IO_ERROR)" par " if(bzerr==BZ_IO_ERROR)" .

et voilla le code est parfait, je rapel que pour l'utiliser sous DEV-C++ il suffi d'installer le DEV-PACK "bzip2" et de linker l'option -lbz2 dans le projet et de trouver sur son ordi la DLL "bzip2.dll" pour accompagner le programme, voillou !!

Pour une utilisation en annex il faut cree le fichier "bzcompress.h" a inclure dans votre programme main.

/* bzcompress.h par 302 ~ joie ludovic ~ 2007 */
int compress_file_to_file(char *fin, char *fout);
int compress_to_file(char *file, char *data, int len);
void * uncompress_from_file(char *filename, int block_size, int *size);
int uncompress_from_file_to_file(char *fin, char *fout, int block_size);
/* */

et pour les rapides voici une fonction test :

#include "bzcompress.h"
et
char source[512];
char compresser[512];
char decompresser[512];

sprintf(source,"image.bmp");
sprintf(compresser,"image compresser.bmp.bz");
sprintf(decompresser,"image decompresser.bmp");

compress_file_to_file(source,compresser);
uncompress_from_file_to_file(compresser,decompresser,0);
/**/

Oki j'espere faciliter la tache a pas mal de monde.
Bonne compression a tous.


/* 302 ~ joie ludovic ~ 2007 */
/* slyders302@hotmail.com */
Afficher les 17 commentaires