2009-05-29 17 views
9

cómo eliminar un directorio determinado recursivamente en C#? ¿Debería el System.IO.Directory.Delete con el segundo parámetro true hacer el truco?Eliminación recursiva de archivos y directorios en C#

EDITAR: Quise decir un directorio que contiene archivos: D Perdón por la mala interpretación.

EDIT2: Entonces, de hecho respondí mi propia pregunta, aunque las respuestas aquí fueron un poco más esclarecedoras. La razón por la que pregunté esto en primer lugar fue porque el código que tiene exactamente esa invocación de Delete (2nd param set to true) no estaba haciendo lo que se suponía que estaba haciendo. Al final resultó que la causa de eso era que había un archivo en alguna parte de la jerarquía del directorio con el conjunto de atributos RO, y la versión polaca de Windows XP estaba lanzando un mensaje realmente extraño para eso.

+1

Creo que ya dio la respuesta usted mismo :-) –

+0

Esto parece una pregunta extraña. El asker ya conoce el segundo parámetro, que es un booleano llamado "recursivo". Básicamente estás diciendo "¿cómo hago recursivo? ¿Configuro recursivo en verdadero?" – joshcomley

+0

OK, quizás la edición aclare. El directorio contiene algunos archivos ... –

Respuesta

8

Sí, ese es el objetivo de ese parámetro. ¿Lo has probado y tienes algún problema? (Acabo de doble comprobado, y funciona bien para mí.)

+2

Aunque vale la pena asegurarse de que no haya archivos/directorios de solo lectura en su ruta primero. Eso me causó algunos problemas hace un tiempo. – Pondidum

+0

eso es exactamente lo mismo. Gracias por la pista: D –

+0

No funcionó para mí, si los subdirectorios también contienen archivos. –

3

recursiva funciona tanto para archivos y carpetas (por extraño, pensé que no funciona para los archivos; mi mala ...):

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

Hay un error en su código. Debería ser baz.txt, obviamente. –

+0

;-p (--buffer--) –

13

la única solución que funcionó para mí si los subdirectorios también contiene archivos es mediante el uso de una función recursiva:

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

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

parece que Directory.Delete (dir, cierto), sólo elimina los archivos del directorio actual y subdirectorios si están vacíos.

Espero que ayude a alguien.

+1

esta es la respuesta real – Seth

+0

. Curiosamente, esto no funciona para mí, ya que el "disco base.Eliminar" intenta eliminar la carpeta que ya no está más cerca. –

Cuestiones relacionadas