c# - pattern - Directory.GetFiles de cierta extensión
string search pattern c# (3)
¿ Directory.GetFiles(String, String)
sobrecarga Directory.GetFiles(String, String)
ya no hace eso? Solo haría Directory.GetFiles(dir, "*.jpg", SearchOption.AllDirectories)
Si desea ponerlos en una lista, simplemente reemplace el "*.jpg"
con una variable que itere sobre una lista y agregue los resultados en un conjunto de resultados general. Mucho más claro que individualmente especificándolos. =)
Algo como...
foreach(String fileExtension in extensionList){
foreach(String file in Directory.GetFiles(dir, fileExtension, SearchOption.AllDirectories)){
allFiles.Add(file);
}
}
(Si sus directorios son grandes, usar EnumerateFiles
lugar de GetFiles
puede ser potencialmente más eficiente)
¿Hay alguna manera de simplificar esta expresión de linq o hay una forma mejor de hacerlo?
Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
.Where(s => s.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) ||
s.EndsWith(".gif", StringComparison.OrdinalIgnoreCase) ||
s.EndsWith(".png", StringComparison.OrdinalIgnoreCase) ||
...);
Básicamente quiero devolver todos los archivos de una cierta extensión. Desafortunadamente, este método no es muy flexible. Preferiría poder agregar extensiones a una lista y hacer que Directory.GetFiles devuelva esas extensiones. ¿Es eso posible?
Lo habría hecho usando solo una línea como
List<string> imageFiles = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
.Where(file => new string[] { ".jpg", ".gif", ".png" }
.Contains(Path.GetExtension(file)))
.ToList();
Si desea filtrar en LINQ, puede hacerlo así:
var ext = new List<string> {".jpg", ".gif", ".png"};
var myFiles = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
.Where(s => ext.Contains(Path.GetExtension(s)));
Ahora ext
contiene una lista de extensiones permitidas; puede agregar o eliminar elementos de él según sea necesario para un filtrado flexible.