Calcul de la taille d'un répertoire

zeloostik Messages postés 16 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 13 octobre 2005 - 8 avril 2005 à 23:13
zeloostik Messages postés 16 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 13 octobre 2005 - 10 avril 2005 à 23:53
Bonjour,

Mon problème est le suivant : je voudrais calculer la taille d'un répertoire donné, et pour l'instant je le fait de façon récursive avec des DirectoryInfo et des FileInfo.

Le problème, mon problème, c'est que c'est très... très long. (Surtout quand il faut calculer la taille d'un disque entier...)

Est-ce que qqn aurait une petite idée de comment faire ca autrement, par exemple en utilisant une api Windows directement (l'explorateur windows lui calcul la taille d'un dossier assez rapidement, so... )

Merci pour votre aide !!

Zel'.

5 réponses

scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
8 avril 2005 à 23:44
Pour le disk dur regarde voir sur les API via appel DLL de :

[DllImport(
"kernel32.dll", CharSet=CharSet.Auto)]
internal
static
extern
int GetDriveType (
string _strRootPathName);


[DllImport(
"kernel32.dll")]
internal
static
extern
uint GetVolumeInformation (
string strPathName, StringBuilder strVolumeNameBuffer,
int _iVolumeNameSize,
out
uint _uiVolumeSerialNumber,
out
uint _uiMaximumComponentLength,
out
uint _uiFileSystemFlags, StringBuilder strFileSystemNameBuffer,
int _iFileSystemNameSize);


[DllImport(
"kernel32.dll")]
internal
static
extern
bool GetDiskFreeSpace (
string lpRootPathName,
out
uint lpSectorsPerCluster,
out
uint lpBytesPerSector,
out
uint lpNumberOfFreeClusters,
out
uint lpTotalNumberOfClusters);



Sinon pour les folders, tu n'as pas trop le choix que le browse récursif

----------------------------
C++ forever
C# amateur
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
9 avril 2005 à 18:33
Pour le disque dur on peut faire plus simple en utilisant WMI.
Y'a beaucoup d'exemple sur le net (c'est plus simple que les API!) ...

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
9 avril 2005 à 18:42
le pb c que les appels WMI sont horriblement lents.

----------------------------
C++ forever
C# amateur
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
9 avril 2005 à 20:28
C'est effectivement pas très rapide.
Tout dépend le type de programme auquel on a à faire, ça peut néanmoins être une bonne solution.

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
zeloostik Messages postés 16 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 13 octobre 2005
10 avril 2005 à 23:53
Merci beaucoup pour ces réponses ! C'est en effet vers une solution du type appel à une API comme kernel32.dll que je vais m'orienter, ca me semble à première vue être le plus rapide.

Je vous tiendrais au courant, et je posterais le code finalisé dans le forum :)
0
Rejoignez-nous