Copier un dossier en C

loris -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Voila je voudrai inclure une fonction de copie de dossier dans un programme en C mais je ne la connais pas ? pouvez vous m'éclairer ??? il y a peut être une bibliothèque a télécharger ?

2 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    Oublie la fonction system pour ce genre de fonction. Ce n'est absolument pas portable en plus d'être inefficace.

    #include <stdio.h>
    
    int copier_fichier(char const * const source, char const * const destination)
    {
        FILE* fSrc;
        FILE* fDest;
        char buffer[512];
        int NbLus;
        
        if ((fSrc = fopen(source, "rb")) == NULL)
        {
            return 1;
        }
        
        if ((fDest = fopen(destination, "wb")) == NULL)
        {
            fclose(fSrc);
            return 2;
        }
        
        while ((NbLus = fread(buffer, 1, 512, fSrc)) != 0)
            fwrite(buffer, 1, NbLus, fDest);
        
        fclose(fDest);
        fclose(fSrc);
        
        return 0;
    }
    

    Source : https://c.developpez.com/faq/?page=Les-fichiers-et-les-dossiers

    Cdlt,
    1
    1. loris
       
      Je t'avoue que je n'ai pas tout compris, mais je vais essayer ...
      donc il faut que j'appelle ta fonction copier_fichier avec comme paramètres les chemin du dossier a copier ?
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Exactement.
      Par exemple : copier_fichier("C:\\toto.txt","D:\\titi.txt");
      Ceci créera un fichier titi.txt (dans le volume D), et sera la copie du fichier C:\toto.txt.
      0
  2. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
     
    dans le langage C lui même il n'y en a pas, par contre selon ton système tu peux utiliser les commandes systèmes à l'aide de :

    http://www.cplusplus.com/reference/cstdlib/system/

    par exemple sur windows, pour copier un dossier il y a la commande xcopy

    xcopy "source" "destination" [options]

    voir l'aide sur xcopy
    (ouvre l'invite de commande windows avec
    menu démarrer
    exécuter...
    tape :
    cmd
    clique sur ok

    dans la fenêtre noire qui s'ouvre tape "help xcopy" et tu auras les instructions pour utiliser la commande.)

    ça pourrait donner quelque chose comme :

    string commande = "XCOPY \"C:\\Users\" \"K:\\My Vista Backup\" /D /E /C /R /I /K /Y ";
    system(commande);

    (dans la commande il y a des guillemets, alors il faut écrire \" au lieu de " pour pouvoir mettre les guillemets dans la chaine, de même il faut écrire \\ au lieu de \ pour les chemins de fichier)

    Sinon il y a aussi des bibliothèques qui font ça (et qui font ça de manière "portable", c-à-d qui s'adaptent selon les système windows, mac unix, etc...) ) mais je n'en n'ai pas sous la main personnellement.
    0
    1. loris
       
      Merci beaucoup !!!
      la fonction system j'y avait penser car avant le C j'utilisait le batch mais j'etais coincé pour les guillemet """.... donc merci bien ... Sinon ton lien sa a l'air bien je vais un coup d'oeil donc merci !!!
      0