Quelle est la syntaxe pour définir plusieurs extensions de fichiersearchPattern
sur Directory.GetFiles()
ON? Par exemple, filtrer les fichiers avec les extensions .aspx et .ascx .
// TODO: Set the string 'searchPattern' to only get files with
// the extension '.aspx' and '.ascx'.
var filteredFiles = Directory.GetFiles(path, searchPattern);
Mise à jour : LINQ n'est pas une option , il doit être searchPattern
transmis GetFiles
, comme spécifié dans la question.
c#
.net
system.io.directory
Seb Nilsson
la source
la source
Réponses:
Je crois qu'il n'y a pas de solution «prête à l'emploi», c'est une limitation de la méthode Directory.GetFiles.
Cependant, il est assez facile d'écrire votre propre méthode, voici un exemple .
Le code pourrait être:
la source
Modifier 23/07/2014
Vous pouvez le faire dans .NET 4.5 pour une énumération plus rapide:
Directory.EnumerateFiles dans MSDN
la source
GetFiles
revientstring[]
.Directory.EnumerateFiles
pour une amélioration des performances ... stackoverflow.com/questions/5669617/…file.EndsWith("...", StringComparison.InvariantCultureIgnoreCase);
plutôt queToLower
GetFiles ne peut correspondre qu'à un seul modèle, mais vous pouvez utiliser Linq pour appeler GetFiles avec plusieurs modèles:
Voir la section commentaires ici: http://www.codeproject.com/KB/aspnet/NET_DirectoryInfo.aspx
la source
new string[]{"*.txt","filename.*"}
. Cependant, l'appel àDistinct
ne résout pas réellement ce problème, car les objets FileInfo se comparent en utilisant l'égalité de référence et non l'égalité sémantique. Il peut être corrigé en supprimant leDistinct
ou en lui passant un fichierIEqualityComparer<FileInfo>
. Édité pour faire l'ancien.SelectMany
cela itérera encore (et encore) sur la même structure de fichiers, ce qui pourrait être sous-optimal en termes de performances.J'aime cette méthode, car elle est lisible et évite les itérations multiples du répertoire:
la source
HashSet<string>
J'ai peur que vous deviez faire quelque chose comme ça, j'ai muté le regex d' ici .
la source
Directory.EnumerateFiles
pour une amélioration des performances ( Quelle est la différence entre Directory.EnumerateFiles et Directory.GetFiles? )Ou, il peut être plus rapide de diviser et de fusionner vos globes (au moins, cela semble plus propre):
la source
La solution facile à retenir, paresseuse et peut-être imparfaite:
la source
J'utiliserais ce qui suit:
EDIT: correction du décalage dû entre Directory et DirectoryInfo
la source
Un moyen plus efficace d'obtenir des fichiers avec les extensions ".aspx" et ".ascx" qui évite d'interroger le système de fichiers plusieurs fois et évite de renvoyer un grand nombre de fichiers indésirables, consiste à pré-filtrer les fichiers en utilisant un modèle de recherche approximatif et pour affiner le résultat par la suite:
la source
J'essaierais de spécifier quelque chose comme
ça devrait marcher.
la source
la source
la source
Au lieu de la fonction EndsWith, je choisirais d'utiliser la
Path.GetExtension()
méthode à la place. Voici l'exemple complet:ou:
(À utiliser
StringComparison.OrdinalIgnoreCase
si vous vous souciez des performances: comparaisons de chaînes MSDN )la source
ressemble à cette démo:
la source
Path.GetExtension
que vous pouvez utiliser.@Daniel B, merci pour la suggestion d'écrire ma propre version de cette fonction. Il a le même comportement que Directory.GetFiles, mais prend en charge le filtrage regex.
Je l'ai trouvé utile, alors j'ai pensé partager.
la source
version c # de la réponse de @ qfactor77. C'est le meilleur moyen sans LINQ.
retourne maintenant
filePath
un tableau de chaînes. Au début tu as besoinvous devez également ajouter une référence à
Microsoft.VisualBasic
la source
J'ai fait un moyen simple de rechercher autant d'extensions que vous en avez besoin, et sans ToLower (), RegEx, foreach ...
Travailler sur .Net Standard 2.0.
la source
Tu peux le faire comme ça
la source
la source
Je voudrais juste dire que si vous utilisez à la
FileIO.FileSystem.GetFiles
place deDirectory.GetFiles
, cela autorisera un tableau de caractères génériques.Par exemple:
la source
FileIO
?