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 :)
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.
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];
Pour ceux qui comme moi on des problèmes de vue sur ce source,
je veux signaler qu'il y a petit problème dans la fonction compress_to_file.
Il ne faut pas lire :
if(bzerr=BZ_IO_ERROR)
{
BZ2_bzWriteClose(&bzerr,bh,1,&in,&out);
fclose(fd);
return -1;
}
mais
if(bzerr==BZ_IO_ERROR)
{
BZ2_bzWriteClose(&bzerr,bh,1,&in,&out);
fclose(fd);
return -1;
}
j ai essayé d utiliser le code avec kdevelop mais ca donne des erreur de type
/home/tannicha/appessai/src/appessai.cpp:334: undefined reference to `BZ2_bzWriteOpen'
/home/tannicha/appessai/src/appessai.cpp:340: undefined reference to `BZ2_bzWriteClose'
que dois je faire??merci
j'ai pris tes deux fonctions de compressions file to file et décompression file to file, et je les ai intégré dans mon prog.
Le prob c'est que la fonction de compression me donne tjrs une taille supperieur pour le fichier compressé.
stp, est ce que tu peux m'aider?
oui...et meme .bz2 pour etre precis!!
en general il est associe a tar, qui permetr de faire une archive (la bzlib ne fait que compresser), ce qui donne des archives .tar.bz2 qui tendent a remplacer les archives .tar.gz ;-)
Plus inprésionant un fichier de vide créé par Windows de taille 100Mo en 23 secondes devient du 113octets et en 6 Sec le 113octes redevient du 100Mo !!!!
Allucinant non ?
Si vous me croyez pas je vous envoi la preuve (en .bz evidement!!)
Et d'après mes test sur tout les compressions celle là est un bon compromis entre vitesse et compression (je ne dirait pas que la compression est sans aucune perte).
Même les format .rar et .zip compresse moins bien (testé seulement avec une bitmap)
" 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 :)
Ca revient à créer un assembleur de fichier avec juste la fonction de lecture et d'écriture qui diffère.
Cependant j'ai une question :
Est il possible de compresser plusieurs fichiers en un
en améliorant ton code ?
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 */