Fusion de fichiers

Soyez le premier à donner votre avis sur cette source.

Vue 3 698 fois - Téléchargée 220 fois

Description

Voila sur demande j'ai fais un porgramme qui permet de fusionner plusieurs fichiers.

pour fusionner abc1.txt ,abc2.txt ,et abc3.txt en res.txt
il faut entrer en argument :
main.exe res.txt abc1.txt abc2.txt abc3.txt

Bon il est facile d'ameliorer ce programme ...
Tout bug est la bienvenue !
Un bug deja previsible :
- fichier de taille tres grande

Source / Exemple :


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

/***********************************************************************/
FILE *MyFileOpen(char *name,char *mode)
{
FILE *f;
if((f = fopen(name,mode)) == NULL)
	{
	printf("Impossible d'ouvir le fichier '%s' en mode '%s' !\n",name,mode);
	getch();
	exit(1);
	}
return f;
}
/***********************************************************************/
void MyFileClose(FILE *f)
{
if(fclose(f) == EOF)
	{
	printf("Impossible de fermer le fichier !\n");
	getch();
	exit(1);
	}
}
/***********************************************************************/
/* calcul la taille du fichier sans modifie la position courante */
size_t MyFileSize(FILE *f)
{
long save;
long size;

/* on sauve la position courante */
save = ftell(f);

fseek(f,0,SEEK_END);
size = ftell(f);

/* on restitue le position courante */
fseek(f,save,SEEK_SET);

return (size_t) size;
}
/***********************************************************************/
/* ecrit une chaine de caractere dans un fichiers */
void MyFilePutString(FILE *f,char *p)
{
int len;
len = strlen(p);
/* on veut mettre le \0 final, d'ou le +1 ... */
fwrite(p,sizeof(char),len+1,f);
}
/***********************************************************************/
/* copie n octet de fIn dans fOut */
void MyFileCopy(FILE *fOut,FILE *fIn,size_t n)
{
while(n > 0)
	{
	char buf[256];
	size_t nbByte;

	nbByte = min(n,256);

	fread(buf,sizeof(char),nbByte,fIn);
	fwrite(buf,sizeof(char),nbByte,fOut);

	n -= nbByte;
	}
}

/***********************************************************************/
/***********************************************************************/
/***********************************************************************/
int main(int argc,char **argv)
{
int 		nbFile;
int 		i;
FILE 		*fOut;

printf("-----------------------------------------------\n");
printf("Lancement du programme : fusion de fichiers ...\n");
if(argc <= 3)
	{
	printf("il faut au moins un fichiers !\n");
	printf("Format : main.exe fileOut fileIn1 [fileIn2,fileIn3,...]\n");
	getch();
	return 1;
	}

nbFile = argc - 2;

/* le mode d'ouverture est important : en binaire */
printf("Fichier de sortie : %s\n",argv[1]);
fOut = MyFileOpen(argv[1],"wb");

/* on enrgistre le nombre de fichiers */
fwrite(&nbFile,sizeof(int),1,fOut);

for(i=1;i<=nbFile;i++)
	{
	FILE 		*fIn;
	char 		*name;
	size_t		size;

	name = argv[i+1];
	/* on ouvre le fichier en lecture */
	printf("- %s\n",name);
	fIn = MyFileOpen(name,"rb");

	/* on enregistre le nom du fichier */
	MyFilePutString(fOut,name);
	/* on enregistre la taille du fichier */
	size = MyFileSize(fIn);
	fwrite(&size,sizeof(long),1,fOut);

	/* on copie le 'size' octet du fichier */
	MyFileCopy(fOut,fIn,size);

	MyFileClose(fIn);
	}

MyFileClose(fOut);
printf("Le programme ce termine bien !\n");
getch();
return 0;
}

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
10
merci c exactement ce que je voulais...
Messages postés
154
Date d'inscription
samedi 3 août 2002
Statut
Membre
Dernière intervention
12 décembre 2008

g trouve ca pa mal ... meme bien !!!

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.