IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

copie de fichiers


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut copie de fichiers
    Bonjour tout le monde ,
    J'ai écrit un bète programme qui consiste à copier un fichier. Tout se passe bien sauf que le dernier enregistrement est copié deux fois.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
        FILE *fichier1,*fichier2;
        int matricule;
        char nom[10],prenom[10];
        /*ouverture des fichiers*/
        fichier1=fopen("c:\\fichierC.txt","r");
        fichier2=fopen("c:\\fichierC2.txt","w");
        while(!feof(fichier1)){
                              fscanf(fichier1,"%i %s %s",&matricule,nom,prenom);
                              fprintf(fichier2,"%i %s %s \n",matricule,nom,prenom);
                              }
        /*fermeture des fichiers*/
        fclose(fichier1);
        fclose(fichier2);
     
     
      system("PAUSE");	
      return 0;
    }
    P.S: je ne sais pas si fscanf est dépréciée mais je suis contraint de l'utiliser car c'est un exercice.

    Merci d'avance pour votre aide


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Pourquoi pas utiliser la méthode classique s'il s'agit de copier tout simplement un fichier source vers un fichier destination ?

    Cette méthode consiste en l'ouverture en mode binaire sur la source et la destination, la lecture fread depuis la source et l'écriture fwrite vers la destination !

    Voir la FAQ: Comment copier un fichier ?
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    J'aurais bien essayé mais je suis obligé de passer par fprintf et fscanf, de plus j'aimerais comprendre l'erreur dans mon programme.
    Merci quand même d'avoir tenté de m'aider.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par afrikha
    J'aurais bien essayé mais je suis obligé de passer par fprintf et fscanf
    C'est une contrainte imposée ? Ou bien c'est par rapport à ce que contient ton fichier source ou meme son formattage (dans ce cas tu peux utiliser la méthode binaire) ?
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Pour ton cas ici présent, le mieux serais de tester et faire l'appel directement dans la condition de ta boucle et de tester avec feof après la boucle, là c'est une meilleure utilisation de cette fonction !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    "feof" permet de tester si le flag "EOF" du flux a été levé par une fonction de lecture; il est généralement utilisé après l'arrêt de la lecture pour vérifier que l'arrêt est bien dû à l'arrivée à la fin du flux et non pas à une erreur de lecture.
    De plus il faudrait vérifier le retour de "fscanf" pour vérifier que tous les éléments ont été lus.

  7. #7
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par afrikha
    P.S: je ne sais pas si fscanf est dépréciée mais je suis contraint de l'utiliser car c'est un exercice.
    scanf n'est pas obsolète, juste compliqué à utiliser. Pour exemple, une meilleur utilisation serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (fscanf(fichier1,"%i %9s %9s",&matricule,nom,prenom) == 3)
    {
      /*  Conversions réussies, on recopie */
    }
    Mais comment faire en cas d'erreur ? Si tu ne fais rien, tu tombe sur une boucle infinie

    fopen peut échouer pense à tester la valeur de retour !

Discussions similaires

  1. Copie de fichier sur le bureau
    Par LoicH dans le forum C++Builder
    Réponses: 3
    Dernier message: 01/05/2005, 20h57
  2. [C#] Copie de fichier via l'API
    Par slyv dans le forum Windows Forms
    Réponses: 5
    Dernier message: 20/12/2004, 22h39
  3. [C#] Copie de fichier via l'API
    Par slyv dans le forum Windows
    Réponses: 5
    Dernier message: 20/12/2004, 22h35
  4. [Kylix] Copie de fichier...
    Par paty.olivier dans le forum EDI
    Réponses: 1
    Dernier message: 23/06/2004, 12h55
  5. Copie de fichier
    Par Bjorn dans le forum C
    Réponses: 4
    Dernier message: 11/06/2002, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo