begin process at 2012 02 10 08:13:21
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > COPIE DE FICHIER [CODE EN C] [GCC]

COPIE DE FICHIER [CODE EN C] [GCC]


 Information sur la source

Note :
6,33 / 10 - par 3 personnes
6,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichiers / Disque Niveau :Initié Date de création :28/05/2001 Date de mise à jour :10/10/2001 00:00:00 Vu :13 704

Auteur : Jo

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

 Description

Exemple d'un programme de copie de fichier

Source

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


 Sources du même auteur

Source avec Zip [G++] [CODE C++] BOTBATTLE
Source avec Zip [G++] [CODE C++] SERVER.CFG GENERATOR POUR COUNTER-STRIKE
LA CARTE AU TRESOR VERSION 0.3 [CODE EN C++] [G++]
Source avec une capture CLIENT/SERVER [CODE EN C] [GCC]
CREATION DE CLASSE [CODE EN C++] [G++]

 Sources de la même categorie

Source avec Zip Source avec une capture GENERE BMP par lajouad
Source avec Zip Source avec une capture GETIONNAIRE D'UNE BIBLIOTHÉQUE EN C par benzarabel
FONCTION D'ÉDITION DE FICHIER BIT À BIT [C-MULTIPLATEFORME] par lynxtyle
Source avec Zip Source avec une capture UN GESTIONNAIRE DU FICHIER par benzarabel
Source avec Zip COPIE DE FICHIERS PAR RESEAU LOCAL par cczerty

Commentaires et avis

Commentaire de BlackWizzard le 12/05/2002 13:04:46 administrateur CS

ne fonctionne pas, il rajoute 2 octets dans le fichier.
Compilé avec GCC sous windows.

Commentaire de Jo le 12/05/2002 13:22:24

Salut,
Bah je dirai que cela viens de windows, car moi il fonctionne tres bien sous linux

Commentaire de TheLudo2013 le 14/11/2002 04:47:08

Le pb de rajout d'octet, c'est a cause du mode de lecture/écriture : dans son code il ouvre les fichiers en mode texte, ce qui fait que les octets sont interprétés avant d'être enrgistrer. Certains caractère sont codé sur 2 octets. La solution est simple, il faut ouvir les deux fichiers en binaire.
    fds = fopen(argv[1], "rb");  
    fdd = fopen(argv[2], "wb");  

Commentaire de TheLudo2013 le 14/11/2002 04:50:05

Je tiens a dire par contre que son algorithme de copie est très lents. En plus il y a déja des apis pour copier les fichiers !!!

Commentaire de topinanbourg le 12/12/2002 00:36:13

perso comme etudiant je trouve ce code simple claire efficace et sans problemme aparents alors merci de ce scource indispensable...

Commentaire de lulu316 le 13/08/2003 12:17:31

Serait-il possible dans le meme principe de faire un outil en C cette fois, qui permettrait la copie de fichier en réseau ou l'on pourrait programmer la date et l'heure de la copie désirée ainsi que la source et la ou les detination(s) ?
Ce serait sympa de me tenir au courant car je suis tres interressée
Merci d'avance
Lucie

Commentaire de fuliculi le 15/07/2004 09:30:51

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);
}

Commentaire de jprozorback le 01/11/2004 17:25:22

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.

Commentaire de hibao le 19/03/2006 22:00:24

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();
}

Commentaire de fuliculi le 19/03/2006 22:04:14

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 ;)

Commentaire de BruNews le 19/03/2006 23:21:25 administrateur CS

Comprendre un code pendant une java, ne doit pas être évident.
Voilà une atténuante pour HIBAO.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 1,872 sec (3)

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