Taille d'un répertoire - 2 méthodes

Soyez le premier à donner votre avis sur cette source.

Vue 5 194 fois - Téléchargée 538 fois

Description

Pour répondre à une demande du forum et vu que la réponse semble ne pas exister sur ce site, voici un petit programme permettant de récupérer la taille d'un répertoire quelconque.

Deux méthodes sont illustrées. La première utilise une méthode récursive avec du code 100% VB. L'autre utilise le FileSystemObject. Il est à noter que la 2e méthode n'est exécutable que si Internet Explorer version 4 (minimum) est présente sur le système, ce qui pourrait déplaire certains.

Source / Exemple :


'Tout est dans le zip...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

philoo91
Messages postés
46
Date d'inscription
vendredi 14 février 2003
Statut
Membre
Dernière intervention
13 juillet 2009
-
Plus Simple :
Public Function PathSize(Optional ByVal sPathName As String) As Double
Dim dSize As Double

Dim sFileNameRecall As String
Dim sFileName As String

Screen.MousePointer = vbHourglass
sPathName = FullStringPath(sPathName)

sFileName = Dir(sPathName, vbDirectory + vbHidden + vbSystem + vbReadOnly)

Do While Len(sFileName) > 0
If StrComp(sFileName, ".", vbBinaryCompare) <> 0 And StrComp(sFileName, "..", vbBinaryCompare) <> 0 Then
If GetAttr(sPathName & sFileName) = vbDirectory Then
dSize = dSize + PathSize(sPathName & sFileName)
sFileNameRecall = Dir(sPathName, vbDirectory + vbHidden + vbSystem + vbReadOnly)
Do While sFileNameRecall <> sFileName
sFileNameRecall = Dir
Loop
Else
dSize = dSize + FileLen(sPathName & sFileName)
End If
End If
sFileName = Dir
Loop

PathSize = dSize

Screen.MousePointer = vbDefault
End Function


Public Function FullStringPath(ByVal Path As String) As String
If Trim(Path) <> "" Then FullStringPath = Path & Left("", -(Right(Trim(Path), 1) <> ""))
End Function
Neo.balastik
Messages postés
797
Date d'inscription
jeudi 17 mai 2001
Statut
Membre
Dernière intervention
5 mai 2009
4 -
Oui, c'est possible... Je ne d is pas le contraire.
Cependant ta fonction plante si je scanne la racine de mon disque C, aussi, si je scanne mon répertoire Windows, ta fonctionne ne retourne pas du tout la même chose que mes fonctions.

La tienne : 1.164.117.101 octets
Mes 2 méthodes retournent la même chose: 1.922.981.426 octets

Y'a comme qui dirait une grosse différence...
Où sont passés les 900.000.000 octets manquants ?
philoo91
Messages postés
46
Date d'inscription
vendredi 14 février 2003
Statut
Membre
Dernière intervention
13 juillet 2009
-
Salut,

Tes deux fonctions retournent entre elles la même chose certes.
Mais la valeur qu'elles ressortent est elle égale à la valeur fourni par le click droit propriété sur le répertoire depuis l'explorateur Windows ?

Pour ma part je sais pkoi y a une différence c'est le test sur le type d'objet fichier répertoire / fichier il fallait écrire :
If (GetAttr(sPathName & sFileName) and vbDirectory) = vbDirectory Then

De plus moi aussi "parfois" j'obtient la meme valeur que l'explorateur pour le \Winnt\ et des fois plus ou moins je pense que windows ecrit des trucs ou en retire dans un ou plusieurs fichiers entre le moment ou le programme calcul et sort les résultats et le moment ou tu fait la demande depuis l'explorateur.

Si ca pete sur c:\ c'est qu'a un moment il passe sur un fichier pour lequel le GetAttr détecte que c'est un répertoire c'est le cas par exemple de pagefile.sys meme avec l'api GetFileAttributes

Je te fini mon exemple et je le mets sur le forum

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.