Est ce que qulqu'un a déjà travaillé avec bzlib

Résolu
progrima Messages postés 125 Date d'inscription lundi 1 novembre 2004 Statut Membre Dernière intervention 4 janvier 2006 - 12 oct. 2005 à 12:12
progrima Messages postés 125 Date d'inscription lundi 1 novembre 2004 Statut Membre Dernière intervention 4 janvier 2006 - 12 oct. 2005 à 14:03
j'essaye de faire un prog qui fait de la compression décompression des fichiers, jarrive à compresser mais pour la décompresion j'ai tjrs l'erreur:
prob de lecture!-->message ds la fonction de décompression

voilà le code :
int compress(char *fin, char *fout)
{
FILE *fdin, *fdout;
BZFILE *bh;
int bzerr;
unsigned int in, out;
char c;

if(!((fdin fopen(fin,"r")) && (fdout fopen(fout,"w"))))
{
return -1; // probleme IO
}

bh = BZ2_bzWriteOpen(&bzerr, fdout, 9, 0, 30); // dans l'ordre : code d'erreur, fichier de sortie, parametre memoire,
// verbosite (0-4), facteur pour le compression (1-250)
if(bzerr != BZ_OK) // onquitte sur une erreur
{
fclose(fdin);
fclose(fdout);
BZ2_bzWriteClose(&bzerr,bh,1,&in,&out); // dans l'ordre : code d'erreur, flux BZ2, action a effectuer avant de quitter (1->rien 0->ecrire les buf internes
// avant de quitter), taille des donnees avant compression, taille apres compression
return -1;
}

while(fread(&c,1,1,fdin) == 1) // boucle d ecriture dans le flux
{
bzerr=BZ_OK;
BZ2_bzWrite(&bzerr,bh,&c,1); // dans l'ordre : code d'erreur, flux BZ2, pointeur sur les donnees, taille des donnees
if(bzerr==BZ_IO_ERROR)
{
BZ2_bzWriteClose(&bzerr,bh,1,&in,&out);
fclose(fdin);
fclose(fdout);
return -1;
}
}

BZ2_bzWriteClose(&bzerr,bh,0,&in,&out); // on a fini donc on ferme!!
fclose(fdin);
fclose(fdout);
if(out >= in) printf("\nAttention : Compression inutile (taille en sortie >= taille en entree)\n");

return 0;
}
/* fin : fichier a decompresser
fout: fichier reslutat
block_size : taille des blocs a utiliser
retourne 0->succes
-1->echec
*/
int uncompress(char *fin, char *fout, int block_size)
{
FILE *fdin;
FILE *fdout;
BZFILE *bh;
int bzerr;
int size_read;
char *data = NULL;


/* allocation initiale de la memoire */
if(block_size 0) block_size DEFAULT_BLOCK_SIZE;
if((data (char *) malloc(block_size)) NULL)
{
MessageBox(NULL,"\nAllocation memoire impossible!\n","",1);
return -1;
}

if(!((fdin fopen(fin,"r")) && (fdout fopen(fout,"w"))))
{
MessageBox(NULL,"\Impossible de lire le fichier d'nentree!\n","",1);

return -1;
}
bh = BZ2_bzReadOpen(&bzerr, fdin, 0, 0, NULL, 0); // dans l'ordre : code d'erreur, FILE *, verbosite (0-4)
// type d algorithme a utiliser (0->+ de memeoire,- de CPU 1->- de memoire, + de CPU)
// les autres e servent a rien quand on commence a lire du debut...
if(bzerr != BZ_OK)
{
BZ2_bzReadClose(&bzerr,bh);
fclose(fdin);
fclose(fdout);
MessageBox(NULL,"\Ouverture du flux impossible!!\n","",1);

return -1;
}

bzerr = BZ_OK;
while(bzerr == BZ_OK)
{
size_read = BZ2_bzRead(&bzerr, bh, data,block_size);

if((bzerr BZ_OK) || (bzerr BZ_STREAM_END))
{
fwrite(data,size_read,1,fdout);
}
else MessageBox(NULL,"\prob de lecture!!\n","",1);
}
/* On a fini donc on ferme tout */
BZ2_bzReadClose(&bzerr,bh);
fclose(fdin);
fclose(fdout);
free(data);

return 0;
}

//pour tester je fais
compress("i.txt","i.bz");
uncompress("i.bz","i.txt",0);

2 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
12 oct. 2005 à 12:33
Essaie en ouvrant les fichier en mode binaire ("rb" et "wb")
3
progrima Messages postés 125 Date d'inscription lundi 1 novembre 2004 Statut Membre Dernière intervention 4 janvier 2006
12 oct. 2005 à 14:03
c'est ce qu'il fallait que je fasse.
Merci beaucoup.
cela fait 3 jours que j'ai ce problème et aujourd'hui c'est le jour où je dois rendre le travail.
tu m'avais sauvé la vie!!!!!
0
Rejoignez-nous