Copier un dossier

Résolu/Fermé
Lye - 28 avril 2021 à 12:00
 Lye - 28 avril 2021 à 13:19
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

[Dal] Messages postés 6014 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 16 novembre 2022 1 030
Modifié le 28 avril 2021 à 12:59
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
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