Répertoire.GetFiles de certains extension
Est-il un moyen de simplifier cette expression linq, ou est-il une meilleure manière de faire ceci?
Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
.Where(s => s.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) ||
s.EndsWith(".gif", StringComparison.OrdinalIgnoreCase) ||
s.EndsWith(".png", StringComparison.OrdinalIgnoreCase) ||
...);
Fondamentalement, je veux retourner tous les fichiers d'une certaine extension. Malheureusement, cette méthode n'est pas très flexible. Je préfère être en mesure d'ajouter des extensions à une liste et Annuaire.GetFiles le retour de ces extensions. Est-ce possible?
- Dupliquer: stackoverflow.com/questions/163162/...
- Double Possible de Pouvez-vous appeler Répertoire.GetFiles() avec plusieurs filtres?
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez faire votre filtrage dans LINQ, vous pouvez le faire comme ceci:
Maintenant
ext
contient une liste des extensions autorisées; vous pouvez ajouter ou supprimer des éléments en tant que de besoin pour le filtrage flexible.GetFiles
, il ne semble pas comme il accepterait la|
comme vous pouvez attendre d'une regex. Les docs disent qu'il ne reconnaît*
et?
, mais bon, si ça marche, ça marche =)Illegal characters in path
en raison de la pipe.Directory.EnumerateFiles
comme mentionné dans la réponse de @nekizalbN'est pas le
Répertoire.GetFiles(String, String)
surcharge le font déjà? Vous faites justeDirectory.GetFiles(dir, "*.jpg", SearchOption.AllDirectories)
Si vous voulez les mettre dans une liste, il suffit de remplacer le
"*.jpg"
avec une variable qui effectue une itération sur une liste et d'agréger les résultats en vue de produire un ensemble de résultats. Beaucoup plus clair qu'individuellement les précisant. =)Quelque chose comme...
(Si votre répertoires sont grandes, à l'aide de
EnumerateFiles
au lieu deGetFiles
peut éventuellement être plus efficace)GetFiles
une fois avant de l'intérieurforeach
et de stocker les résultats, puis en utilisant le stockée que dans la listeforeach
.J'aurais fait avec juste une ligne comme
.Where()
permettra de créer unstring[]
à chaque fois qu'il est invoqué; c'est, pour chaque fichier sousdir
. Sidir
est, disons,@"C:\"
, alors que cela pourrait potentiellement créer des dizaines ou des centaines de milliers de courte durée "poubelle" des tableaux. Je crois vraiment que ce serait la peine à définir votre tableau à l'extérieur de.Where()
, même si cela signifie avoir à écrire que redouté de la seconde ligne de code.