Copier un dossier

Résolu
Lye -  
 Lye -
Bonjour, débutant en C, j'essaie de copier un dossier (que j'appelle test) dans un autre dossier (test2).

Le code :

fonction.c :


#include <windows.h>
#include <shellapi.h>
 
int CreationDossier(char* rep)
{
    SHFILEOPSTRUCT shfo;
    ZeroMemory(&shfo, sizeof(SHFILEOPSTRUCT));
    shfo.hwnd = NULL;
    shfo.wFunc = FO_COPY;
    shfo.pFrom = "rep\\*";
    shfo.pTo = "D:\\Dossier\\test2\\test\\*\0";
    shfo.fFlags = FOF_NOCONFIRMMKDIR|FOF_NOCONFIRMATION;
 
    SHFileOperation(&shfo);
 
    return 0;
}


main.c :

if .....

CreationDossier(rep);

....


La variable rep contient le chemin absolu du dossier que je veux copier (test).

Lors de l’exécution, aucun dossier n'est créé, je travaille via l'API Windows.

1 réponse

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Salut Lye,

    Je n'ai jamais utilisé cette fonction. Selon la doc, elle renvoie un entier qui est un code d'erreur.

    https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shfileoperationa

    Peux tu récupérer le retour de la fonction et voir quel est le code d'erreur renvoyé ?

    Ligne 11 du écris
    shfo.pFrom = "rep\\*";
    , cela ne va pas mettre magiquement la chaîne pointée par le
    char* rep
    dans ce champ de la struct.

    Cela ne serait pas plutôt
    shfo.pFrom = rep
    que tu veux faire ?

    La doc Microsoft indique que cette fonction (qui a l'air toujours supportée) a été "remplacée", à partir de Windows Vista, par IFileOperation (que je ne connais pas plus que cela personnellement). C'est peut-être aussi une piste à creuser pour toi :-)

    Dal
    0
    1. Lye
       
      Lorsque je mets rep comme tu l'as dit, cela me mets lors de l’exécution "Le nom de fichier spécifié n'est pas valide ou est trop long." Avec le nom de dossier concerné, ainsi que sa date de création, qui correspond bien à mon dossier à copier.

      Je vais regarder pour IFileOperation merci pour l'info

      EDIT : j'ai modifié le chemin : D:\\test2\\test\0, cela a fonctionné

      Merci pour ton aide !
      0