begin process at 2012 05 29 06:32:33
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

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


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

mercredi 12 octobre 2005 à 12:12:29 | est ce que qulqu'un a déjà travaillé avec bzlib

progrima

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);

mercredi 12 octobre 2005 à 12:33:11 | Re : est ce que qulqu'un a déjà travaillé avec bzlib

ymca2003

Réponse acceptée !
Essaie en ouvrant les fichier en mode binaire ("rb" et "wb")
mercredi 12 octobre 2005 à 14:03:01 | Re : est ce que qulqu'un a déjà travaillé avec bzlib

progrima

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!!!!!


Cette discussion est classée dans : bzerr, fdin, fdout, bh, bz2


Répondre à ce message

Sujets en rapport avec ce message

!!! Info BZ2 (mieux que Zlib) !!! [ par yoyo269 ] Voilà je souhaite compresser des fichiers dans un programme en utilisant le librairie BZ2.Une source a été déposée là-dessus, la voici :http://www.cpp


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,265 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales