web-dev-qa-db-fra.com

Meilleure façon d'itérer les dossiers et sous-dossiers

Quelle est la meilleure façon d'itérer les dossiers et sous-dossiers pour obtenir la taille des fichiers, le nombre total de fichiers et la taille totale des dossiers dans chaque dossier à partir d'un emplacement spécifié?

34
Rod

Utilisez Directory.GetFiles () . Le bas de cette page contient un exemple entièrement récursif, je crois.

29
Lloyd

Si vous utilisez .NET 4, vous souhaiterez peut-être utiliser le System.IO.DirectoryInfo.EnumerateDirectories et System.IO.DirectoryInfo.EnumerateFiles méthodes. Si vous utilisez le Directory.GetFiles méthode comme d'autres publications l'ont recommandé, l'appel de méthode ne reviendra pas tant qu'il n'aura pas récupéré TOUTES les entrées. Cela peut prendre du temps si vous utilisez la récursivité.

De la documentation :

Les méthodes EnumerateFileset GetFiles diffèrent comme suit:

  • Lorsque vous utilisez EnumerateFiles, vous pouvez commencer à énumérer la collection d'objets FileInfo avant de renvoyer la collection entière.
  • Lorsque vous utilisez GetFiles, vous devez attendre que tout le tableau d'objets FileInfo soit renvoyé avant de pouvoir accéder au tableau.

Par conséquent, lorsque vous travaillez avec de nombreux fichiers et répertoires, EnumerateFiles peut être plus efficace.

46
Chris Dunaway

Pour parcourir tous les répertoires des sous-dossiers et fichiers, peu importe la quantité de sous-dossiers et de fichiers.

string [] filenames;
 fname = Directory.GetFiles(jak, "*.*", SearchOption.AllDirectories).Select(x => Path.GetFileName(x)).ToArray();

puis à partir du tableau, vous pouvez obtenir ce que vous voulez via une boucle ou comme vous le souhaitez.

5
safi

Notez que vous devrez effectuer des vérifications de validation.

string[] fileNames = Directory.GetFiles("c:\\", "*.*", SearchOption.AllDirectories);
int fileCount = fileNames.Count();
long fileSize = fileNames.Select(file => new FileInfo(file).Length).Sum(); // in bytes
2
HuBeZa

Pour parcourir les fichiers et les dossiers, vous utiliseriez normalement les types DirectoryInfo et FileInfo . Le type FileInfo a une propriété Length qui renvoie la taille du fichier en octets.

Je pense que vous devez écrire votre propre code pour parcourir les fichiers et calculer la taille totale du fichier, mais cela devrait être une fonction récursive assez simple.

1
Rune Grimstad