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:
<code class="language-csharp">Directory.GetFiles("C:\path", "*.mp3|*.jpg", SearchOption.AllDirectories); Directory.GetFiles("C:\path", "*.mp3;*.jpg", SearchOption.AllDirectories);</code>
Lösungen:
für .NET 4.0 und später: Hebel linq für eine elegante Lösung:
<code class="language-csharp">var files = Directory.EnumerateFiles("C:\path", "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));</code>
für ältere .NET-Versionen: Ein ähnlicher LINQ-basierter Ansatz funktioniert effektiv:
<code class="language-csharp">var files = Directory.GetFiles("C:\path", "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".mp3") || s.EndsWith(".jpg"));</code>
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:
<code class="language-csharp"> 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.</code>
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!