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.
A voir également:

1 réponse

[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 104
 
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
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