2010-03-09 18 views
7

Ich habe einen Pfad und ich möchte die Unterverzeichnisse darunter auflisten, wobei jedes Unterverzeichnis kein anderes Verzeichnis enthält. (Nur die Unterverzeichnisse, die keine Ordner, sondern nur Dateien enthalten.)Alle Unterverzeichnisse, die nur Dateien enthalten

Jeder intelligente Weg?

+3

Ich fürchte, ich verstehe das Bit in Klammern überhaupt nicht - könnten Sie versuchen, es neu zu schreiben? –

Antwort

21

Es ist mein Verständnis, dass Sie die Unterverzeichnisse unter einem bestimmten Pfad auflisten möchten, die nur Dateien enthalten.


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

Ich weiß, diese Frage ist 3 Jahre alt, aber können Sie erklären, wie das funktioniert? Da dies die genaue Antwort ist, nach der ich suche. Ich möchte nur sicherstellen, dass ich den Code verstehe. – webdad3

+0

Speziell die .Length == 0 Teil. Wie soll ich das lesen? – webdad3

+2

Für ein Verzeichnis ohne Unterverzeichnisse gibt 'Directory.GetDirectories (Unterverzeichnis)' eine leere 'string []' zurück, die eine 'Länge' von' 0' hat. Daher wählen wir nur Verzeichnisse, die diesem Kriterium entsprechen, um die Verzeichnisse zu erfassen, die nur Dateien enthalten (möglicherweise auch keine Dateien). –

1

Sie können die Directory.GetDirectories Methode verwenden.

Allerdings bin ich mir nicht sicher, ob ich deine Frage richtig verstanden habe ... könntest du das klären?

16

DirectoryInfo

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

Basierend auf Havard Antwort, aber ein wenig kürzer (und vielleicht leichter etwas zu lesen, weil es !Subdirs.Any() statt Subdirs.Length == 0 verwendet):

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

Beachten Sie auch, dass dies erfordert using System.Linq; zu arbeiten, da es die LINQ-Abfragesprache verwendet. (Und natürlich using System.IO; für die Directory Klasse :))

Verwandte Themen