Die Herausforderung:
Abrufen von Dateien verschiedener Typen mit Directory.GetFiles()
enthält eine gemeinsame Programmierhürde. Die Methode selbst unterstützt nicht direkt mehrere Dateitypfilter.
Ineffektive Ansätze:
solche Versuche ergeben nicht die gewünschten Ergebnisse:
Directory.GetFiles("C:\path", "*.mp3|*.jpg", SearchOption.AllDirectories); Directory.GetFiles("C:\path", "*.mp3;*.jpg", SearchOption.AllDirectories);
Lösungen:
für .NET 4.0 und später: Hebel linq für eine elegante Lösung:
var files = Directory.EnumerateFiles("C:\path", "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));
für ältere .NET-Versionen: Ein ähnlicher LINQ-basierter Ansatz funktioniert effektiv:
var files = Directory.GetFiles("C:\path", "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));
Optimierung für Leistung und Speicher:
Wenn Sie sich mit einer großen Anzahl von Dateien befassen, werden die Leistung und der Speicherverbrauch kritisch. Wie von Christian.K festgestellt, kann die Directory.GetFiles()
-Methode erinnertintensiv sein. Der Vorschlag von Paul Farry, Directory.EnumerateFiles()
zu verwenden, wird sehr empfohlen, um eine bessere Speicherverwaltung zu erhalten:
var files = Directory.EnumerateFiles("C:\path", "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg")); ``` This iterates through files one at a time, preventing the loading of all filenames into memory simultaneously.
Das obige ist der detaillierte Inhalt vonKann Directory.getFiles () mehrere Dateitypfilter verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!