Rekursive Dateisuche in .net
-
22-07-2019 - |
Frage
Ich brauche ein Laufwerk (C :, D: usw.) für die Suche nach einem partuicular Dateityp (Erweiterung wie .xml, .csv, .xls). Wie Vorform ich eine rekursive Suche in einer Schleife alle Verzeichnisse und innere Verzeichnisse und gibt den vollständigen Pfad, wo die Datei (en) sind? oder wo kann ich Informationen zu diesem Thema erhalten?
VB.NET oder C #
Danke
Bearbeiten ~ ich in einige Fehler leite wie derzeit keine Systemvolumen Zugriff auf Zugriff verweigert usw. Weiß jemand, wo ich auf die Implementierung einer Datei zu suchen einige smaple Code sehen kann? Ich brauche nur fanden ein ausgewähltes Laufwerk und gibt den vollständigen Pfad des Dateitypen für alle Dateien zu suchen.
Lösung
Wie wäre es damit? Es vermeidet die Ausnahme ausgelöst oft durch die eingebaute rekursive Suche (dh Sie in einem einzelnen Ordner Zugriff verweigert werden, und Ihre ganze Suche stirbt) und faul ausgewertet wird (dh es so bald zurückkehrt führt, wie er sie findet statt Pufferung 2000 Ergebnisse). Der faule Verhalten können Sie etc reaktions UIs bauen, und funktioniert auch gut mit LINQ (vor allem First()
, Take()
, etc).
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
static class Program { // formatted for vertical space
static void Main() {
foreach (string match in Search("c:\\", "*.xml")) {
Console.WriteLine(match);
}
}
static IEnumerable<string> Search(string root, string searchPattern) {
Queue<string> dirs = new Queue<string>();
dirs.Enqueue(root);
while (dirs.Count > 0) {
string dir = dirs.Dequeue();
// files
string[] paths = null;
try {
paths = Directory.GetFiles(dir, searchPattern);
} catch { } // swallow
if (paths != null && paths.Length > 0) {
foreach (string file in paths) {
yield return file;
}
}
// sub-directories
paths = null;
try {
paths = Directory.GetDirectories(dir);
} catch { } // swallow
if (paths != null && paths.Length > 0) {
foreach (string subDir in paths) {
dirs.Enqueue(subDir);
}
}
}
}
}
Andere Tipps
System.IO.Directory.GetFiles(@"c:\", "*.xml", SearchOption.AllDirectories);
Es sieht aus wie der AWE Bibliothek - steht für rec ursive ls - hat jetzt eine rel="noreferrer">. Ich habe gerade las darüber in Dr. Dobbs .
Würde wie verwendet werden:
using Recls;
using System;
static class Program { // formatted for vertical space
static void Main() {
foreach(IEntry e in FileSearcher.Search(@"c:\", "*.xml|*.csv|*.xls")) {
Console.WriteLine(e.Path);
}
}