Copier un dossier en C

Fermé
loris - 28 août 2010 à 14:36
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 31 août 2010 à 21:49
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 ?
A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
31 août 2010 à 21:03
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
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
31 août 2010 à 21:49
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
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
Modifié par Pacorabanix le 28/08/2010 à 16:12
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
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