2009-05-29 9 views
9

Comment supprimer un répertoire donné récursivement en C#? Est-ce que le System.IO.Directory.Delete avec le second paramètre true devrait faire l'affaire?Suppression récursive de fichiers et de répertoires en C#

EDIT: Je voulais dire un fichier contenant le répertoire: D Désolé pour le misunderstaning.

EDIT2: Donc, en fait je ne répondre à ma propre question, bien que les réponses ici ont été un peu plus de clarification. La raison pour laquelle j'ai demandé ceci en premier lieu était que le code qui a exactement cette invocation de Delete (2nd param sur true) ne faisait pas ce qu'il était censé faire. Comme il s'est avéré la cause de cela était qu'il y avait un fichier quelque part dans la hiérarchie du répertoire avec l'ensemble d'attributs RO, et la version polonaise de Windows XP jetait un message vraiment étrange pour cela.

+1

Je pense que vous avez déjà donné la réponse vous :-) –

+0

Cela ne semble une question bizarre. Le demandeur connaît déjà le deuxième paramètre, qui est un booléen appelé "récursif". Vous êtes en train de dire "comment je fais récursif? Dois-je définir récursif à vrai?" – joshcomley

+0

OK, peut-être que l'édition clarifie. Le répertoire contient des fichiers ... –

Répondre

8

Eh oui, qui est le point de ce paramètre. Avez-vous essayé et avez-vous des problèmes? (Je viens revérifié, et il fonctionne très bien pour moi.)

+2

Bien qu'il soit important de s'assurer qu'il n'y a pas de fichiers/répertoires en lecture seule dans votre chemin d'abord. Cela m'a causé quelques problèmes il y a quelques temps. – Pondidum

+0

c'est exactement la chose. THanks pour l'indice: D –

+0

N'a pas fonctionné pour moi, si les sous-répertoires contient également des fichiers. –

3

récursive fonctionne pour les fichiers et dossiers (curieusement, je pensais que cela ne fonctionne pas pour les fichiers, mon mauvais ...):

// create some nested folders... 
Directory.CreateDirectory(@"c:\foo"); 
Directory.CreateDirectory(@"c:\foo\bar"); 
// ...with files... 
File.WriteAllText(@"c:\foo\blap.txt", "blup"); 
File.WriteAllText(@"c:\foo\bar\blip.txt", "blop"); 
// ...and delete them 
Directory.Delete(@"c:\foo", true); // fine 
+4

Il y a un bug dans votre code. Ça devrait être baz.txt, évidemment. –

+0

;-P (--buffer--) –

13

la seule solution qui a fonctionné pour moi si les sous-répertoires contient également des fichiers est en utilisant une fonction récursive:

public static void RecursiveDelete(DirectoryInfo baseDir) 
    { 
     if (!baseDir.Exists) 
      return; 

     foreach (var dir in baseDir.EnumerateDirectories()) 
     { 
      RecursiveDelete(dir); 
     } 
     baseDir.Delete(true); 
    } 

Il semble que Directory.Delete (dir, true) supprimer uniquement les fichiers du répertoire en cours et sous-répertoires s'ils sont vides.

aide quelqu'un espère que cela.

+1

ceci est la réponse réelle – Seth

+0

assez intéressant, cela ne fonctionne pas pour moi, depuis le « baseDir.Delete » essaie de supprimer le dossier qui ne sont pas plus ARROUND. –

Questions connexes