Directory.GetFiles di determinate estensioni

C’è un modo per semplificare questa espressione di linq, o c’è un modo migliore per farlo?

Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) || s.EndsWith(".gif", StringComparison.OrdinalIgnoreCase) || s.EndsWith(".png", StringComparison.OrdinalIgnoreCase) || ...); 

Fondamentalmente voglio restituire tutti i file di una certa estensione. Sfortunatamente, questo metodo non è molto flessibile. Preferirei essere in grado di aggiungere estensioni a un elenco e fare in modo che Directory.GetFiles restituisca tali estensioni. È ansible?

Se vuoi fare il tuo filtraggio in LINQ, puoi farlo in questo modo:

 var ext = new List {".jpg", ".gif", ".png"}; var myFiles = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories) .Where(s => ext.Contains(Path.GetExtension(s))); 

Ora ext contiene un elenco di estensioni consentite; puoi aggiungere o rimuovere elementi da esso se necessario per un filtro flessibile.

Il sovraccarico di Directory.GetFiles(String, String) non lo fa già? Dovresti semplicemente fare Directory.GetFiles(dir, "*.jpg", SearchOption.AllDirectories)

Se si desidera inserirli in un elenco, sostituire semplicemente "*.jpg" con una variabile che scorre su un elenco e aggregare i risultati in un set di risultati complessivo. Molto più chiaro rispetto a specificarli individualmente. =)

Qualcosa di simile a…

 foreach(String fileExtension in extensionList){ foreach(String file in Directory.GetFiles(dir, fileExtension, SearchOption.AllDirectories)){ allFiles.Add(file); } } 

(Se le tue directory sono grandi, usare EnumerateFiles invece di GetFiles può potenzialmente essere più efficiente)

Avrei fatto usando solo una linea come

 List imageFiles = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories) .Where(file => new string[] { ".jpg", ".gif", ".png" } .Contains(Path.GetExtension(file))) .ToList();