Question

Je suis sous C ++ programmation, MFC, fenêtres.

Je veux supprimer un dossier dans la corbeille. Comment puis-je faire?

    CString filePath = directorytoBeDeletePath;
    TCHAR ToBuf[MAX_PATH + 10];
    TCHAR FromBuf[MAX_PATH + 10];
    ZeroMemory(ToBuf, sizeof(ToBuf));
    ZeroMemory(FromBuf, sizeof(FromBuf));

    lstrcpy(FromBuf, filePath);

    SHFILEOPSTRUCT FileOp;
    FileOp.hwnd = NULL
    FileOp.wFunc=FO_DELETE; 
    FileOp.pFrom=FromBuf;
    FileOp.pTo = NULL;
    FileOp.fFlags=FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
    FileOp.hNameMappings=NULL;
    bRet=SHFileOperation(&FileOp);

Toute chose ne va pas avec le code ci-dessus? Elle a toujours échoué.

J'ai trouvé le problème: filePath devrait être: "c: \ abc" et non "c: \ abc \"

Était-ce utile?

La solution

La valeur de retour de SHFileOperation est un int, et préciser le code d'erreur. Qu'est-ce que vous obtenez?

Autres conseils

Je sais que ce n'est pas la bonne façon, mais si vous ne trouvez pas une solution que vous pouvez essayer cette ..

fichier de téléchargement nircmd.exe ou d'une autre exe qui peut vider la corbeille.

vous appelez ces fonctions par le système ( "emptybin nircmd.exe")

Vous avez trouvé une solution qui fonctionne, mais il est seulement par accident. Le problème réel est que le paramètre pFrom est dans un format spécial. Selon MSDN docs pour SHFILEOPTS , il stocke une liste de chemins de fichiers, chacun terminée par un nULL, et un nul supplémentaire après la dernière.

Dans votre cas, cela arrive à travailler parce que le tableau de FromBuf est plus long que le nom de fichier et toutes les entrées sont initialisés à zéro. La solution la plus générale est de créer un tampon suffisamment longtemps pour que le nom de fichier, puis ajoutez deux caractères NUL après. Notez que les noms de fichiers de Windows peut être plus long que _MAX_PATH, voir par exemple https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file#maximum-path-length-limitation

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top