begin process at 2012 05 27 14:01:27
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > [C BZLIB] LIRE ET ÉCRIRE UN FICHIER COMPRESSÉ

[C BZLIB] LIRE ET ÉCRIRE UN FICHIER COMPRESSÉ


 Information sur la source

Note :
Aucune note
Catégorie :Divers Classé sous :compression, bz2, bzlib Niveau :Débutant Date de création :24/02/2010 Vu :1 826

Auteur : Zestyr

Ecrire un message privé
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Salut, voila 2 fonctions qui montre comment lire et écrire un fichier compressé. Ca permet de faire perdre 80% du poid de votre fichier. Il faut installer la bzlib. Sous linux il suffit de taper en console "apt-get install libbz2-dev" en mode super utilisateur ( précédez la commande de sudo si vous êtes sous ubuntu et cie ). Pour compiler votre programme il faut linker /usr/lib/libbz2.a ou /usr/lib/libbz2.so au choix !

Bonne prog !

Source

  • #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;
  • }
  • }
#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;
	}
}

 Conclusion

BZFILE *BZ2_bzWriteOpen(int *bzerror, FILE *f, int blockSize100k, int verbosity, int   workFactor);

void BZ2_bzWrite(int *bzerror, BZFILE *b, void *buf, int len);

void BZ2_bzWriteClose) (int *bzerror, BZFILE *b, int abandon, unsigned int *nbytes_in, unsigned int *nbytes_out);


BZFILE *BZ2_bzReadOpen(int *bzerror, FILE *f, int verbosity, int small, void *unused, int nUnused);

int BZ2_bzRead(int *bzerror, BZFILE *b, void *buf, int len);

void BZ2_bzReadClose(int *bzerror, BZFILE *b );


 Sources du même auteur

GESTION D'UN JOYSTIQUE AVEC L'APIWND

 Sources de la même categorie

Source avec Zip KISIEL CD INFO DRIVE par kisiel0147852
Source avec une capture SUPPRESSION DES REDONDANCES DE FICHIERS par cyberntique
Source avec Zip ÉDITEUR DE RECTANGLES EN CONSOLE par seoseo
CONVERSION DE FICHIER EN FICHIER BMP par seoseo
Source avec Zip DETECTEUR EJP par idpro

 Sources en rapport avec celle ci

Source avec Zip COMPRESSION / DECOMPRESSION SELON L'ALGORITHME LEMPELZIV 78V par th1man
Source avec Zip Source avec une capture COMPRESSION FICHIERS ALGORITHME HUFFMAN C par xtremejames183
Source avec Zip Source avec une capture BROUILLAGE DES FICHIERS JAVASCRIPT ET CSS(WIN32) par gagah1
Source avec Zip CODEUR DE HUFFMAN par webis
Source avec Zip Source avec une capture LOGICIEL DE SAUVEGARDE COMPLET AVEC ENCRYPTAGE (7-ZIP) [DEV-... par ryokan

Commentaires et avis

Commentaire de Alain Proviste le 01/03/2010 17:02:12 administrateur CS

"Ca permet de faire perdre 80% du poid de votre fichier."

donc en appliquant 6 fois la compression , je devrais pouvoir réduire mon fichier à 25% de sa taille d'origine.

Commentaire de Zestyr le 02/03/2010 14:08:42

Biensure tu peux même le faire 20 fois si ça te chantes xp

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

compression et decompression d'un fichier [ par asma ] salut tt le monde , vous pouvez me filer un coup de main les gars ?? je veux une astuce pour compresser et decompresser un fichier (EN C++ evidemment compression et c++ [ par fakbill ] A l'adresse http://www.cjkware.com/wamckee/huffman.zip j'ai touvé une implémentation en c++ de l'algo de huffman.Pb: Je ne cromprends rien à la façon codec de compression vidéo [ par jcom ] salut ! quelqu'un aurait pas une idée (ou des liens) sur la façon de créer un codec de compression vidéo (genre divx sans la prétention) ? Algorithme de compression STAR amélioré [ par hi_vivie2 ] Bonjour à tous,Je dois réaliser de manière urgente l'implémentation en java de l'algorithme de compression STAR amélioré appliqué aux images en mouvem Algorithme de compression STAR amélioré [ par hi_vivie2 ] Bonjour à tous,Je dois réaliser de manière urgente l'implémentation en java de l'algorithme de compression STAR amélioré appliqué aux images en mouvem Compression de fichier [ par JMGR ] Salut,Comment peut-on compresser et décompresser un fichier en étant sous Windows 98 ?Merci d'avance,J.M.G.R video compression [ par bibou75 ] salut à tous,je cherche toutes info sur les fonction ICOpen ICCompressorchoose et tout ce qui est initialisation de video compression manager je vous fonction de hachage pour compression Lzh [ par cambouis ] Bonjour, je cherche a mettre en application l'algo Lzh. Connaitriez-vous une fonction de hachage qui me permette d'accélérer les recherches dans le di serveur FTP et compression [ par despro007 ] Bonjour, je debute en peu en C++,mais dans le cadre d'un projet plus vaste (multi langage) je dois réaliser un serveur ftp compressant les données env Format de fichier : très étrange [ par GoldenEye ] Bonjour à tous J'ai un problème très bizarre: je viens de revenir sur un programme de compression (Huffman sur ce site) et je m'aperçois qu'il ne fonc


Nos sponsors


Sondage...

Comparez les prix

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,671 sec (4)

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