2010-09-22 4 views
8

Par une autre question sur le nombre maximum de fichiers dans un dossier, je remarquai que Que faire si DirectoryInfo.GetFiles(). Length dépasse Int32.MaxValue?

DirectoryInfo.GetFiles().Length 

renvoie une System.In32, mais la valeur maximale d'un Int32 est

2.147.483.647 (Int32.MaxValue) 

pendant NTFS (un tas d'autres systèmes de fichiers) le nombre maximum de fichiers peut aller bien au-delà.

sur NTFS, il est

4.294.967.295 single files in one folder (probably an Uint32) 

Ce qui me conduit à la question intéressante:

Est-il possible d'obtenir le nombre de fichiers dans un dossier sur NTFS avec le framework .NET, lorsque le nombre de fichiers dépasse le Int32.MaxValue, d'une manière élégante et performante?

note: ce n'est pas une question de pourquoi. et je sais, ce sont beaucoup de fichiers;)

+0

Avez-vous vraiment besoin de stocker plus de fichiers int.MaxValue dans un dossier? – TalentTuner

Répondre

6

Il y a une propriété LongLength sur Array, qui renvoie la longueur en long. Quoi qu'il en soit, si GetFiles renvoie plus Int32.MaxValue articles, vous aurez des problèmes quand même ... comme un OutOfMemoryException;)

Lorsque vous ne avez pas réellement besoin du nombre d'articles, je vous suggère d'utiliser la méthode EnumerateFiles au lieu (introduit dans 4,0). Il ne récupère pas tous les noms de fichiers en mémoire à la fois, mais les récupère un par un.

+0

donc je dois boucler les ensembles creux de In32.Max (ou moins) et ajouter les résultats de DirectoryInfo.EnumerateFiles(). Count(), comme d'une manière gentille et douce? –

+2

Si vous voulez seulement le nombre de fichiers (pas les noms de fichiers eux-mêmes), oui, EnumerateFiles sera probablement plus efficace (et utilisera beaucoup moins de mémoire) –