Question

Est-il possible (sous Windows d’utiliser Delphi 2010) d’obtenir le nombre de fichiers d’un répertoire sans parcourir tous les fichiers?

Je souhaite implémenter une barre de progression lors d'une opération d'indexation de système de fichiers. Pour cette raison, j'ai besoin de savoir combien de fichiers se trouvent dans le répertoire.

Quel est le moyen le plus rapide d’obtenir le nombre de fichiers d’un répertoire?

Était-ce utile?

La solution

Je pense que le moyen le plus rapide consiste à utiliser la méthode TDirectory.GetFiles située dans IOutils.pas. Comme le nombre de fichiers (visibles) dans un répertoire peut être différent pour chaque utilisateur, il n’ya que très peu de chance qu’il n’y ait qu’un nombre à récupérer.

L'approche FindFirst / FindNext (qui est encapsulée dans la méthode ci-dessus) ne traverse pas les fichiers, elle ne fait que traverser les entrées d'une table, de sorte qu'elle pourrait être plus rapide que prévu.

Autres conseils

Si vous utilisez Windows 7 ou Server 2008 R2, je vous recommande d'extraire les fonctions FindFirst et FindMatchingFile de SysUtils et de pirater l'ancien logiciel pour qu'il utilise FindFirstFileEx au lieu de FindFirstFile. Ensuite, vous pouvez définir le paramètre flags supplémentaire sur 2 (défini dans MSDN sous la forme FIND_FIRST_EX_LARGE_FETCH ) avec ce paramètre conditionné sur (Win32majorversion = 6) et (Win32minorversion > = 1), pour le moment.

Ce paramètre produit une augmentation très importante de la vitesse pour les boucles FindFirst / FindNext sur ces systèmes d'exploitation. Recherchez FindFirstFileEx sur MSDN pour plus de détails, comme la documentation la plus récente ne figure pas dans la documentation Microsoft extraite de l'aide de Delphi.

TDirectory.GetFiles semble finalement appeler FindFirst. Par conséquent, il ne vous procurera aucun avantage autre que la simplification de votre propre code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top