Copier un dossier [Résolu]

Signaler
-
 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

Messages postés
5550
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
12 mai 2021
933
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
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 !