0/5 (2 avis)
Vue 5 303 fois - Téléchargée 171 fois
/*********************************************************************************/ /*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); }
3 avril 2004 à 15:28
La commande copy du DOS est de loin suffisante, efficace et rapide non ?????? En plus on peut ainsi concatener une liste de fichiers avec *.
3 avril 2004 à 08:53
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.