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 :

copier tout un dossier


Sujet :

C

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Par défaut copier tout un dossier
    Bonjour !

    J'ai créé un petit programme permettant de copier un fichier source vers un fichier destination .
    J'avais un petit problème, parce qu'il me rajoutait un caractère en plus à la fin dans le fichier de destination et c'est pour cela que je compte les caractères et arrête d'écrire dans le fichier de destination à i-1 .
    Bon, ça c'est pas trop grave, si vous savez pourquoi ça ajoute un caractère en plus, merci de me le dire !

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
        FILE* fichierSource = NULL;
        FILE* fichierDest = NULL;
        long caractereActuel1 = 0;
        long caractereActuel2 = 0;
        long i = 0;
        long j = 0;
     
        fichierSource = fopen("source.txt", "rb");
     
        if (fichierSource == NULL)
        {
            printf("Il y a une erreur, le fichier source ne doit pas exister\n\n");
            system("PAUSE");	
            return 0;
        }
     
         // on compte le nombre de caracteres 
     
         while (caractereActuel1 != EOF)
            {  
               caractereActuel1 = fgetc(fichierSource);
               i++;
               }
     
     
        fichierDest = fopen("dest.txt", "wb");
        rewind(fichierSource);
     
     
        for ( j=0 ; j < (i-1) ; j++)
            {
                caractereActuel2 = fgetc(fichierSource); // On lit le caractère
                fputc(caractereActuel2, fichierDest); // On l'écrit dans le fichier de destination
            } 
     
     
        fclose(fichierSource);
        fclose(fichierDest);
     
     
      system("PAUSE");	
      return 0;
    }


    Enfaite, maintenant j'aimerai ( si c'est possible, bien évidemment ... ) copier tout un dossier et non plus qu'un fichier .
    Mais je ne vois vraiment pas comment faire .
    Merci de me mettre sur la voie s'il y a une possibilité .
    Sinon, je tourne sous XP et j'ai pas besoin d'utiliser le programme sur un autre OS .

    Bonne journée à tous !


    diabgolo

  2. #2
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Citation Envoyé par diabgolo
    Bonjour !

    J'ai créé un petit programme permettant de copier un fichier source vers un fichier destination .
    J'avais un petit problème, parce qu'il me rajoutait un caractère en plus à la fin dans le fichier de destination et c'est pour cela que je compte les caractères et arrête d'écrire dans le fichier de destination à i-1 .
    Bon, ça c'est pas trop grave, si vous savez pourquoi ça ajoute un caractère en plus, merci de me le dire !
    Hé bien parce que tu comptes le EOF comme caractère dans ta boucle while. Ce dernier n'est pas à vrai dire un caractère, c'est une valeur renvoyée par certaines fonctions qui indique que l'on a atteint la fin de fichier. Cf plus bas.

    Citation Envoyé par diabgolo
    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
    24
    25
    26
    27
    28
    29
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
        FILE* fichierSource = NULL;
        FILE* fichierDest = NULL;
        long caractereActuel1 = 0;
        long caractereActuel2 = 0;
        long i = 0;
        long j = 0;
     
        fichierSource = fopen("source.txt", "rb");
     
        if (fichierSource == NULL)
        {
            printf("Il y a une erreur, le fichier source ne doit pas exister\n\n");
            system("PAUSE");	
            return 0;
        }
     
         // on compte le nombre de caracteres 
     
         while (caractereActuel1 != EOF)
            {  
               caractereActuel1 = fgetc(fichierSource);
               i++;
               }
    La façon idiomatique pour une lecture caractère par caractère. Comme ceci, on n'incrémente pas i si la finde fichier a été atteinte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ( (caractereActuel1 = fgetc(fichierSource) )  != EOF)
            {  
               i++;
             }

    Citation Envoyé par diabgolo
    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
     
        fichierDest = fopen("dest.txt", "wb");
        rewind(fichierSource);
     
     
        for ( j=0 ; j < (i-1) ; j++)
            {
                caractereActuel2 = fgetc(fichierSource); // On lit le caractère
                fputc(caractereActuel2, fichierDest); // On l'écrit dans le fichier de destination
            } 
     
     
        fclose(fichierSource);
        fclose(fichierDest);
     
     
      system("PAUSE");	
      return 0;
    }


    Enfaite, maintenant j'aimerai ( si c'est possible, bien évidemment ... ) copier tout un dossier et non plus qu'un fichier .
    Mais je ne vois vraiment pas comment faire .
    Merci de me mettre sur la voie s'il y a une possibilité .
    Sinon, je tourne sous XP et j'ai pas besoin d'utiliser le programme sur un autre OS .

    Bonne journée à tous !


    diabgolo
    Regardes du côté de CopyFile (CopyFileEx) dans l'API Win32.

    A+

  3. #3
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    Utilises fread/fwrite avec un buffer pour copier un fichier.

    Pour copier un dossier, voir dans la FAQ.

  4. #4
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Par défaut
    ok, je vais essayer tout ça !
    Merci beaucoup pour vos réponses et bonne journée !

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/08/2012, 14h02
  2. copier TOUT le contenu d'un dossier vers un nouveau dossier
    Par majudis dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 31/03/2010, 22h43
  3. Copier tout dans un dossier
    Par a7aa7a dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 08/05/2007, 14h57
  4. Réponses: 3
    Dernier message: 17/01/2006, 14h50

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