Directory.GetAllImageFiles Wie soll ich es machen?
-
12-11-2019 - |
Frage
Ich möchte ein String-Array mit allen in einem Verzeichnis gefundenen Bildern füllen.
Bis jetzt verwende ich Folgendes, um alle Bilder im JPG-Format zu erhalten
Dim List() as string = Directory.GetFiles(Path, "*.jpg")
Jetzt möchte ich es erweitern und alle Bildformate erhalten.
Könnte ich das Verzeichnis.GetFiles in Kombination mit einem " verwenden?ImageFormat
Aufzählung"?
Lösung
Hallo, Sie können das verwenden, was ich als Community-Inhalt unter gefunden habe http://msdn.microsoft.com/en-us/library/wz42302f.aspx.:
private static string[] GetFiles(string sourceFolder, string filters)
{
return filters.Split('|').SelectMany(filter => System.IO.Directory.GetFiles(sourceFolder, filter)).ToArray();
}
eine Alternative, die Lazy Evaluation verwendet (nur .Net 4.0):
private static IEnumerable<string> GetFiles(string sourceFolder, string filters)
{
return filters.Split('|').SelectMany(filter => System.IO.Directory.EnumerateFiles(sourceFolder, filter));
}
Sie können es gerne verwenden GetFiles("dir", "*.jpg|*.gif|*.jpeg|*.bmp|*.png")
.Es handelt sich im Wesentlichen nur um eine Suche nach jedem Filter nicht so effizient wie es nur geht.
Eine endgültige Version ist (ist nur .Net 4.0, kann aber zumindest auf eine 2.0-Lösung umgestellt werden):
private static IEnumerable<string> GetImageFiles(string sourceFolder)
{
return from file in System.IO.Directory.EnumerateFiles(sourceFolder)
let extension = Path.GetExtension(file)
where extension == ".jpg" || extension == ".gif" || extension == ".png"
select file;
}
Ich glaube, der letzte ist der schnellste, weil er nur einmal eine Schleife durchführt.Dies hängt jedoch davon ab, wie die Mustersuche implementiert wird Directory
und wie das Betriebssystem sucht.Es ist ein Leistungstest erforderlich, den ich nicht durchgeführt habe.
Andere Tipps
Dies ist 2.0 .NET-Lösung.
Ich habe in C # etwas Ähnliches gemacht.Diese Lösung verwendete einen Ordner als Abwurfstelle für zu verarbeitende Bilder.Laden Jede Dateityp als Bild ist in allen Fällen nicht korrekt, aber ich wollte jede Datei als ladbares Bild bestätigen. generasacodicetagpre.
dreht sich heraus, ich habe ein Stück vergessen ... Bevor ich die Dateien bearbeite, habe ich eine Funktion verwendet, um Dateien zu begrenzen, die verarbeitet wurden: generasacodicetagpre.