Soyez le premier à donner votre avis sur cette source.
Snippet vu 3 920 fois - Téléchargée 19 fois
#include <stdio.h> #include <stdlib.h> #include <bzlib.h> int write_file_comp(char *filename, char *content); // retourne 0 en cas de succès et moins de 0 si une erreur est survenue int read_file_comp(char *filename, char *buffer, int bufsize); // retourne 0 en cas de succès et moins de 0 si une erreur est survenue int main() { char buffer[20]; write_file_comp("test.bz2", "Test reussi !"); read_file_comp("test.bz2", buffer, 20); printf("%s\n", buffer); return 0; } int write_file_comp(char *filename, char *content) { FILE *file; BZFILE *bzfile; int bzerr; unsigned int nbytes_in, nbytes_out; file = fopen(filename, "wb"); // wb signifie qu'on ouvre en mode écriture binaire mais sous linux le b est facultatif car les fichiers sont ouvert systhématquement en mode binaire if(!file) // impossible d'ouvrir le fichier { fclose(file); return -1; } bzfile = BZ2_bzWriteOpen(&bzerr, file, 9, 0, 30); if(bzerr != BZ_OK) // impossible de réouvrir le fichier avec bz2 { BZ2_bzWriteClose(&bzerr, bzfile, 1, &nbytes_in, &nbytes_out); fclose(file); return -2; } BZ2_bzWrite(&bzerr, bzfile, content, strlen(content)); if(bzerr == BZ_IO_ERROR) // problème lors de l'écriture { BZ2_bzWriteClose(&bzerr, bzfile, 1, &nbytes_in, &nbytes_out); fclose(file); return -3; } BZ2_bzWriteClose(&bzerr, bzfile, 0, &nbytes_in, &nbytes_out); fclose(file); return 0; } int read_file_comp(char *filename, char *buffer, int bufsize) { FILE *file; BZFILE *bzfile; int bzerr, n; file = fopen(filename, "rb"); if(!file) // impossible d'ouvrir le fichier { fclose(file); return -1; } bzfile = BZ2_bzReadOpen(&bzerr, file, 0, 0, NULL, 0); if(bzerr != BZ_OK) // impossible de réouvrir le fichier avec bz2 { BZ2_bzReadClose(&bzerr, bzfile); fclose(file); return -2; } while(bzerr == BZ_OK) { n = BZ2_bzRead(&bzerr, bzfile, buffer, bufsize); if(bzerr == BZ_OK) { int l; buffer[n] = '\0'; /* remplace les octets nuls par des espaces */ while(n < (l = strlen(buffer))){buffer[l] = ' ';} } if(bzerr != BZ_STREAM_END) // problème lors de la lecture { BZ2_bzReadClose(&bzerr, bzfile); fclose(file); return -2; } else { int l; buffer[n] = '\0'; /* remplace les octets nuls par des espaces */ while(n < (l = strlen(buffer))){buffer[l] = ' ';} } BZ2_bzReadClose(&bzerr, bzfile); fclose(file); return 0; } }
j'ai remarqué que la lecture et l'écriture dans le fichier est plus coûteuse qu'avec les méthodes classiques. Plus le fichier est volumineux plus on prend du temps pour le lire.
donc en appliquant 6 fois la compression , je devrais pouvoir réduire mon fichier à 25% de sa taille d'origine.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.