C# - Recurse-Verzeichnisse verwenden-Verzeichnis.GetFiles und Suchmuster
Möchte ich finden, der alle excel-Dateien innerhalb einer Verzeichnis-Struktur unter Verwendung der Rekursion. Das problem ist, das Suchmuster verwendet, die im Verzeichnis.GetFiles erlaubt nur eine einzige Erweiterung zu einem Zeitpunkt.
Weiß jemand eine Möglichkeit, um dieses oder muss ich recurse durch die Verzeichnisse, die mehrere Male auf der Suche nach spezifischen Erweiterungen? Oder können Sie einfach schnappen Sie sich jede einzelne Datei, und dann in einer Schleife durch diese Liste durch und sucht für spezifische Erweiterungen. So oder so, klingt ein wenig ineffizient.
Dank
- ist das nicht der filter ".xl*" gut genug"?
- Kannst du nicht einfach "*.xl*" als Suchbegriff ein?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In .NET jeder version gibt es SearchOption.TopDirectoryOnly und SearchOption.AllDirectories
In .NET 4 konnte man sehr effizient z.B.:
(In diesem Beispiel Filter für Dateien mit zwei Ziffern im Namen)
Emulieren, Schreibe eine rekursive enumerator-Methode (Rendite), um alle Dateien, und filtern Sie das Ergebnis in etwa so:
HTH
Ändern Sie Ihre rekursive Schleife und haben eine Liste von mustern. zB
}
In .NET 4 gibt es eine zusätzliche überladung, erlaubt die Einbeziehung von Unterordnern
BEARBEITEN Hoppla, ich nicht Lesen die Frage sehr gut...
Schau mal hier
Wenn Sie nur wollen, um alle excel-Dateien, verwenden Sie das Muster ".xl".
Ansonsten würde ich vorschlagen, zu nennen
Directory.GetFiles
ohne Muster und filter die passenden Erweiterungen von hand.Durchlaufen Verzeichnis und Unterverzeichnisse, Egal, wie viel sub-Ordner oder Dateien sind, können Sie die Dateien in ein array.
Sie können geben Sie den Typ Datei, Jpeg, Excel, Word, Msword, was immer Sie wollen, in der Verlängerung Abschnitt.
anzugeben oder Um Mehrere such-option für verschiedene Datei-Erweiterungen, können Sie dies so tun:
Ich denke, dass die zweite alternative ist effizienter. Schleife durch jede Datei mit dem folgenden Muster: .xl, dann Schränken Sie die Liste nach einer bestimmten Endungen.
Etwas wie:
Könnten Sie mithilfe der EndsWith-Methode zu überprüfen, "f" gegen jede Erweiterung oder extrahieren Sie die Erweiterung über den Pfad.GetExtension-Methode und suchen Sie es in eine hashtable mit den gewünschten Erweiterungen.
just my $.02
hth