Eliminación recursiva de archivos y directorios en C #

¿Cómo borrar un directorio dado recursivamente en C #? ¿Debería el System.IO.Directory.Delete con el segundo parámetro verdadero hacer el truco?

EDITAR: Me refiero a un directorio que contiene archivos: D Perdón por el malentendido.

EDIT2: Entonces, realmente respondí mi propia pregunta, aunque las respuestas aquí fueron un poco más aclaratorias. La razón por la que pregunté esto en primer lugar fue que el código que tiene exactamente esa invocación de Eliminar (el segundo parámetro establecido en verdadero) no estaba haciendo lo que se suponía que estaba haciendo. Resultó que la causa de esto era que había un archivo en algún lugar de la jerarquía de directorios con el conjunto de atributos RO, y la versión polaca de Windows XP estaba enviando un mensaje realmente extraño para eso.

Sí, ese es el punto de ese parámetro. ¿Lo intentaste y tienes algún problema? (Acabo de hacer una doble comprobación y funciona bien para mí).

La única solución que me funcionó si los subdirectorios también contienen 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, true) solo borra los archivos del directorio actual y los subdirectorios si están vacíos.

Espero que ayude a alguien.

por cierto, ejemplo: RecursiveDelete( new DirectoryInfo(@"C:\my_dir") );

Trabajos recursivos tanto para archivos como para carpetas (curiosamente, pensé que no funcionaba para archivos; mi error …):

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

¿Por qué no usar?

Directory.Delete (directoryPath, true);

https://msdn.microsoft.com/en-us/library/fxeahc5f(v=vs.110).aspx

Si obtiene UnauthorizedAccessException. Puedes usar modificada de RecursiveDelete desde Jone Polvora . Gracias por la Idea. Lo usaré.

  public static void RecursiveDelete(DirectoryInfo baseDir) { if (!baseDir.Exists) return; foreach (var dir in baseDir.EnumerateDirectories()) { RecursiveDelete(dir); } var files = baseDir.GetFiles(); foreach (var file in files) { file.IsReadOnly = false; file.Delete(); } baseDir.Delete(); }