2010-05-11 6 views
1

Évidemment, je n'ai jamais eu à supprimer un répertoire en utilisant win32 sdk auparavant, car c'est apparemment une tâche impossible. J'ai essayé tout et n'importe quoi - RemoveDirectory, SHFileOperation avec FO_DELETE, etc.Impossible de supprimer le répertoire

Actuellement, j'appelle CreateDirectory dans un thread, démarre un autre thread, copie des fichiers dans ce répertoire dans le nouveau thread, puis supprime tous les fichiers dans le répertoire dans le nouveau thread, puis de nouveau dans le thread d'origine qui a créé le répertoire, essayez de supprimer le répertoire maintenant vide et il échoue. Le répertoire est vraiment vide lorsque j'essaye de le supprimer, mais cela ne fait aucune différence. Tout l'aspect du fil n'est pas pertinent, je pense parce qu'à un moment donné, tout était dans un fil et cela n'a pas fonctionné. Je suis en train de définir une structure SecurityAttributes sur CreateDirectory pour accorder l'accès à tout le monde, mais cela ne fait aucune différence. RemoveDirectory dans le passé a renvoyé '32' sur GetLastError, qui je crois est la violation de partage.

Mais même si j'essaye simplement de supprimer le répertoire vide de la ligne de commande, il refuse de dire, "Le processus ne peut pas accéder au fichier parce qu'il est utilisé par un autre processus." jusqu'à ce que je ferme l'application entière qui a créé le répertoire. (Note: le répertoire est créé dans GetTempPath.)

+2

Cela peut être un coup dans le noir, mais peut-être un de vos threads a-t-il toujours un handle ouvert sur le répertoire? Avez-vous vérifié si vous fermez toutes vos poignées? –

+0

Au meilleur de ma connaissance, le répertoire est uniquement accessible via CopyFile et DeleteFile, mais je vais vérifier. – Mark

+0

En fait, j'utilise txml (Tiny XML) pour ouvrir un fichier XML dans le répertoire. Mais le TixmlDocument a longtemps été fermé (hors champ et effacé) au moment où j'essaye de supprimer le répertoire - en fait le fichier xml lui-même a été supprimé depuis longtemps - mais peut-être que quelque chose se passe dans txml. – Mark

Répondre

4

Erreur 32 est en effet "Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus." Utilisez-vous FindFirstFile() pour créer votre liste de copie? - Cela verrouillera le répertoire jusqu'à FindClose().

+0

"Est-ce que vous utilisez peut-être FindFirstFile()" oui – Mark

+0

Je ne savais même pas que FindClose existait - jamais entendu parler auparavant. – Mark

+0

Comme je dis je ne l'ai jamais utilisé - devrais-je modifier tout le code existant dans l'ensemble de l'application pour toujours utiliser FindClose. – Mark

Questions connexes