Concaténation de deux fihcier

0/5 (2 avis)

Vue 5 116 fois - Téléchargée 167 fois

Description

Ce programme concatène deux fichiers, il est écrit en c.

Source / Exemple :


/*********************************************************************************/
/*Ce programme est sous license GNU                                              */
/*El Antri Abdellah (Djillali Liabes university, Informatic departement, Algeria)*/
/*E-Mail: El_Emir_2002@yahoo.fr                                                  */
/*********************************************************************************/

/*-------------------------------------------------------------------------*/
/* Compiled with TC++ 3 under windows                                      */
/* Use cc to compil programme under unix/linux                          */
/*-------------------------------------------------------------------------*/

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

int main(int argc,char **argv)
{
char buf[2*1024], fname_src[50], fname_dest[50];
FILE *src,*dest;
int copyed, read, nbr_err;

printf("\n\r Copyright(C), El Antri Abdellah 2001\n");
printf("\n\r *****************************************************************************");
printf("\n\r *This program concatenate the file src in the end of file dest.             *");
printf("\n\r *if the file dest does not exist the programme create it and copy src in it.*");
printf("\n\r *file src and file dest must be in current directory                         *");
printf("\n\r *****************************************************************************");
if(argc != 3)
  {
  printf("\n Name of file src:");scanf("%s",fname_src);
  printf("\n Name of file dest:");scanf("%s",fname_dest);
  }
  else if (argc == 3)
       {
       strcpy(fname_src, argv[1]);
       strcpy(fname_dest, argv[2]);
       }
       else {
	    printf("\n\r Syntax error: Concat name_file_src name_file_dest or concat.");
	    printf("\n\r Hit key ..");
	    exit(1);
	    }

if((dest = fopen(fname_dest,"a+")) == NULL)
		{
		printf("\n Erreur: can't open or create %s",fname_dest);
		exit(1);
		}
if((src = fopen(fname_src,"r")) == NULL)
      {
      printf("\n Erreur: can't open %s",fname_src);
      fclose(dest);
      exit(1);
      }
printf("\nGo!\n");
while(!feof(src))
     {
     printf(".");
     nbr_err = 0;
     read = 0;
     do
       {
	nbr_err = nbr_err + 1;
	read = fread(buf,sizeof(buf),1,src);
       }while (read != 1 && nbr_err < 5);
     if(nbr_err == 5)
       {
       printf("\n\r Error: Read from %s",fname_src);
       printf("\n\r Hit key ..");
       getch();
       exit(1);
       }
     nbr_err = 0;
     copyed = 0;
     do
       {
	nbr_err = nbr_err + 1;
	copyed = fwrite(buf,sizeof(buf),1,dest);
       }while( copyed != 1 && nbr_err < 5);
     if(nbr_err == 5)
       {
       printf("\n\r Error: Write to %s",fname_dest);
       printf("\n\r Hit key ..");
       getch();
       exit(1);
       }

     }
fclose(src);
fclose(dest);
return(0);

}

Conclusion :


Tout vos questions; propositions seront les bien venu.
Email: El_Emir_2002@yahoo.fr

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
17
Date d'inscription
jeudi 25 mars 2004
Statut
Membre
Dernière intervention
6 décembre 2004

Hum, c est un programme cool, mais pourquoi si l objectif est uniquement de concatener deux programmes, je vois pas trop l utilite .....

La commande copy du DOS est de loin suffisante, efficace et rapide non ?????? En plus on peut ainsi concatener une liste de fichiers avec *.
Messages postés
23
Date d'inscription
samedi 24 janvier 2004
Statut
Membre
Dernière intervention
17 octobre 2004

coucou, c'est re-moi...
petite faute d'anglais :
copyed = copied

Trois commentaires:
- La taille de ton buf (10 octets) fait que la copie de ton fichier va devoir faire énormément de boucles pour copier un fichier de quelques Ko. Je te conseillerais de prendre au moins 2Ko voir plus, mais dans ce cas de recourir à malloc en C ou new si tu fais du C++ et dans ce cas d'allouer 10, 50 ou 100Ko, voir même plus.
- Les noms de variables sont plus adéquats que dans ton autre code du parallélogramme.
- Toutefois la variable read n'est pas très bien choisie car il y a dans stdio une fonction read qui est le pendant non bufferisé de fread, ça gêne donc la lecture. Et qui sait peut être que certains compilateurs basiques seraient gênés.

Voila, c tout.

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.