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é?
Utilisez Directory.GetFiles () . Le bas de cette page contient un exemple entièrement récursif, je crois.
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
EnumerateFiles
etGetFiles
diffèrent comme suit:
- Lorsque vous utilisez
EnumerateFiles
, vous pouvez commencer à énumérer la collection d'objetsFileInfo
avant de renvoyer la collection entière.- Lorsque vous utilisez
GetFiles
, vous devez attendre que tout le tableau d'objetsFileInfo
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.
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.
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
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.