Copie de fichier [code en c] [gcc]

Soyez le premier à donner votre avis sur cette source.

Snippet vu 17 719 fois - Téléchargée 39 fois

Contenu du snippet

Exemple d'un programme de copie de fichier

Source / Exemple :


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

int main(int argc, char *argv[])
{
        //declaration des flux
	FILE *fds, *fdd;      
	int value;
	fds = fopen(argv[1], "r");  //ouverture en lecture seule
	fdd = fopen(argv[2], "w");  //ouverture en ecriture
	if(!(fds && fdd))  //si l'ouverture des fichiers echoue, arret du programme
	{
	    exit(0);
	}
	while(!feof(fds))  //tant que je suis pas a la fin du fichier d'entree
	{
	    value = fgetc(fds); //recupere caractere par carectere du fichier d'entree, et rangement dans value
	    if (value == EOF) //Si je suis a la fin du fichier (d'entree) j'arrete le programme
	    {
		exit(0);
	    }
	    value = fputc(value, fdd); //je copie les caractere dans le fichier de sortie
    
	    if(value == EOF) //Si je suis a la fin du fichier de sortie donc c'est une erreur, alors j'arrete le programme en affichant un message d'erreur
	    {
		fprintf(stderr, "\nProbleme d'ecriture\n");
		exit(-1);
	     }
	  }
//J'ai terminer de copier donc je ferme tous les flux
	fclose(fds);
	fclose(fdd);
	return 0;
	
}

Conclusion :


Une foi ce programme compiler, il faut l'executer comme suit:
programme fichier_originale.txt copie_du_fichier.txt

A voir également

Ajouter un commentaire Commentaires
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Comprendre un code pendant une java, ne doit pas être évident.
Voilà une atténuante pour HIBAO.
Messages postés
43
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
3 mai 2010
2
Faux, j'indique à fread qu'il peut lire JUSQU'A 1024 bits mais lui me retourne le nombre de bits lus (donc 100 si il n'en reste pas plus). Je récupère cette valeur et je n'enregistre que le nombre de bits restant, et pas 1024 pour le dernier paquet (enfin une chance sur 1024, hein ;)
Messages postés
2
Date d'inscription
dimanche 22 mai 2005
Statut
Membre
Dernière intervention
3 septembre 2006

ton code est un peu faux parce que a chaque fois tu ecris 1024 bits dans le fichier et si il ne te reste que 100 bits dans le fichier de lecture tu va comme meme ecrire 1024 dans ton fichier de destination donc t'aurra pas la bonne taille a la fin
voici un code en java il est aussi tres lent mais il marche
import java.io.*;
public void copier(String chemin_copie) throws Exception{

BufferedReader buffer_r = null;
FileReader file = null;
FileWriter file_copie = null;
BufferedWriter buffer_w = null;


try {
file = new FileReader(this.chemin);
buffer_r = new BufferedReader(file);
file_copie = new FileWriter(chemin_copie);
buffer_w = new BufferedWriter(file_copie);
}
catch (FileNotFoundException excp) {System.out.println("Fichier d'entree introuvable");}
catch (IOException excp) {System.out.println("Fichier de sortie introuvable");}
String ch = null;

do {
try {
ch = buffer_r.readLine();
if (ch != null) {
buffer_w.write(ch);
buffer_w.newLine();
}
}
catch (IOException excp) {System.out.println(excp + " : Probleme copie");}

} while(ch!=null);
buffer_w.close();
}
Messages postés
31
Date d'inscription
lundi 9 août 2004
Statut
Membre
Dernière intervention
28 mars 2006

dabort aucune utimité d'inclure <string.h>
le exit(0) et exit(-1) te fait terminer le prog sans avoir fermé les flux.
en plus c'est du C.
Messages postés
43
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
3 mai 2010
2
C'est pas plus simple?

#include <stdio.h>

void main(void)
{
FILE *streamOut;
FILE *streamIn;

streamOut = fopen("file.fic", "wt");

streamIn = fopen("file_copy.fic", "rt");

char buffer[1024];
int bytesRead;

do
{
bytesRead = fread(buffer, 1, 1024, streamIn);
fwrite(buffer, 1, bytesRead, streamOut);
}
while(bytesRead==1024);

fclose(streamOut);
fclose(streamIn);
}
Afficher les 11 commentaires

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.