2010-03-09 27 views
7

Tengo una ruta y quiero enumerar los subdirectorios debajo de ella, donde cada subdirectorio no contiene ningún otro directorio. (Solo aquellos subdirectorios que no contienen carpetas, pero solo archivos.)Obtener todos los subdirectorios que solo contienen archivos

¿Alguna manera inteligente de hacerlo?

+3

Me temo que no entiendo nada entre corchetes, ¿podría intentar reescribirlo? –

Respuesta

21

Es mi entendimiento de que desea listar los subdirectorios por debajo de un camino dado que sólo contienen archivos.


static IEnumerable<string> GetSubdirectoriesContainingOnlyFiles(string path) 
{ 
    return from subdirectory in Directory.GetDirectories(path, "*", SearchOption.AllDirectories) 
     where Directory.GetDirectories(subdirectory).Length == 0 
     select subdirectory; 
} 
+0

Sé que esta pregunta tiene 3 años, pero ¿puedes explicar cómo funciona esto? Como esta es la respuesta exacta que estoy buscando. Solo quiero asegurarme de que entiendo el código. – webdad3

+0

Específicamente la parte .Length == 0. ¿Cómo debería leer eso? – webdad3

+2

Para un directorio sin subdirectorios, 'Directory.GetDirectories (subdirectorio)' devolverá una 'cadena' vacía [] ', que tendrá una' Longitud' de '0'. Por lo tanto, seleccionamos solo directorios que coinciden con ese criterio para captar los directorios que contienen solo archivos (sin embargo, posiblemente tampoco archivos). –

1

Puede usar el método Directory.GetDirectories.

Sin embargo, no estoy seguro de entender su pregunta correctamente ... ¿podría aclarar?

16

DirectoryInfo

DirectoryInfo dInfo = new DirectoryInfo(<path to dir>); 
DirectoryInfo[] subdirs = dInfo.GetDirectories(); 
1

Sobre la base de la respuesta de Havard, pero un poco más corto (y tal vez un poco más fácil de leer, ya que utiliza !Subdirs.Any() en lugar de Subdirs.Length == 0):

static IEnumerable<string> GetSubdirectoriesContainingOnlyFiles(string path) 
{ 
    return Directory.GetDirectories(path, "*", SearchOption.AllDirectories) 
      .Where(subdir => !Directory.GetDirectories(subdir).Any()); 
} 

También tenga en cuenta, que esto requiere using System.Linq; a trabajo, ya que utiliza el lenguaje de consulta LINQ. (Y por supuesto using System.IO; para la clase Directory :))

Cuestiones relacionadas