Trouver le nombre de fichiers avec une extension spécifique, dans tous les sous-répertoires
Est-il un moyen de trouver le nombre de fichiers d'un type spécifique sans avoir à parcourir l'ensemble des résultats inn un Répertoire.GetFiles() ou une méthode similaire? Je suis à la recherche de quelque chose comme ceci:
int ComponentCount = MagicFindFileCount(@"c:\windows\system32", "*.dll");
Je sais que je peux faire une fonction récursive appel Répertoire.GetFiles , mais il serait beaucoup plus propre si je pouvais le faire sans tout le itération.
EDIT: Si il n'est pas possible de le faire sans recursing et d'itération vous-même, quelle serait la meilleure façon de le faire?
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser le Répertoire.GetFiles(chemin d'accès, searchPattern, SearchOption) surcharge de Répertoire.GetFiles().
Chemin spécifie le chemin d'accès, searchPattern spécifie les caractères génériques (par exemple, *, *.format) et SearchOption fournit l'option inclure les sous-répertoires.
La propriété Length du tableau de résultats de cette recherche vont fournir le bon nombre de fichiers pour votre modèle de recherche et d'option:
EDIT: Alternativement, vous pouvez utiliser Répertoire.EnumerateFiles méthode
GetFiles
méthode va se matérialiser, ensemble liste des fichiers dans un répertoire. La méthode préférée pour, maintenant, c'estDirectory.EnumerateFiles
il sera de diffuser les fichiers en arrière (par le biais d'unyield
comme mécanisme) que l'appel sous-jacent à l'OS, les rendements les résultats.EnumerateFiles
est considérablement plus lent: si vous avez besoin de l'évolutivité, c'est OK, mais il n'y a pas de raison de prendre le coup dans la plupart des cas.La meilleurs méthode woud être utiliser linq:
Directory.EnumerateFiles(@"H:\iPod_Control\Music", "*.mp3", SearchOption.AllDirectories).Count()
Vous pouvez utiliser cette surcharge de GetFiles:
et ce membre de SearchOption:
GetFiles () retourne un tableau de string, de sorte que vous pouvez obtenir juste la Longueur qui est le nombre de fichiers trouvés.
J'ai été à la recherche pour une version optimisée. Puisque je n'ai pas trouvé, j'ai décidé de code et de le partager ici:
Toutes les solutions à l'aide de la GetFiles/GetDirectories sont un peu lent car tous ces objets doivent être créés. À l'aide de l'énumération, il n'est pas de créer tous les objets temporaires (FileInfo/DirectoryInfo).
voir les Remarques http://msdn.microsoft.com/en-us/library/dd383571.aspx pour plus d'informations
En utilisant la récursivité votre MagicFindFileCount devrait ressembler à ceci:
Si Jon solution pourrait être la meilleure.
J'ai une application qui génère des comtes de les répertoires et les fichiers dans un répertoire parent. Certains répertoires contiennent des milliers de sous-répertoires avec des milliers de fichiers dans chaque. Pour ce faire, tout en conservant un réactif de l'interface utilisateur je ne les suivants: (en joignant le chemin d'accès à ADirectoryPathWasSelected méthode):
Quelqu'un doit faire le itération de la partie.
Autant que je sache, il n'existe pas de méthode présents dans .NET déjà, donc je suppose que quelqu'un a à vous.