Bonjour à tous
Je fais suite à un mon post lister-sous-repertoires-vides-api-windows .
Comment en restant sur cette solution technique, récupérer la capacité/poids des repertoires.
Merci par avance pour votre aide
Bonjour chez vous![]()
Bonjour à tous
Je fais suite à un mon post lister-sous-repertoires-vides-api-windows .
Comment en restant sur cette solution technique, récupérer la capacité/poids des repertoires.
Merci par avance pour votre aide
Bonjour chez vous![]()
Bonjour
Si tu t'obstines à vouloir faire cela à l'aide de fonctions de l'Api de Windows :
1) voilà de quoi calculer, avec de telles fonctions, la taille d'UN SEUL fichier :
Code pour 32 bits. Types à modifier si 64 bits :
2) Il te faut donc parcourir les fichiers et incrémenter un compteur des tailles relevées. !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Private Declare Function lOpen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long Private Declare Function lclose Lib "kernel32" Alias "_lclose" (ByVal hFile As Long) As Long Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long Dim mot_haut As Long Public Function extrait_taille(chemin As String) As Long Dim p_fic As Long, taille As Long p_fic = lOpen(chemin, &H0&) extrait_taille = GetFileSize(p_fic, mot_haut) lclose p_fic End Function Private Sub command1_Click() MsgBox extrait_taille("d:\doevents.xlsm") & " octets" End Sub
Existe peut-être (je n'en sais rien) une autre fonction, d'une autre librairie, retournant directement la taille d'un dossier. Je ne la cherche même pas, car elle ne ferait qu'utiliser elle-même ces trois fonctions et totaliser ... Autant le faire soi-même, alors !
3) Je ne comprends pas pourquoi tu ne le fais pas en utilisant le même principe (parcourir et totaliser les tailles) en utilisant en boucle la fonction Filelen native de VBA ...
Dans un processus récursif ça devient lourd quand avec filesysobject il existe une méthode.
Donc va falloir mixer les deux.
Merci pour ton aide unparia
Bonjour chez toi![]()
que vient faire (que viendrait faire) "filesysobject" là-dedans ? Et qui en parle ? Explique !quand avec filesysobject il existe une méthode.
Donc va falloir mixer les deux.
Un exemple valant mieux qu' un long discours
Size Property
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Function ShowFolderSize(filespec) Dim fso, f, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(filespec) s = UCase(f.Name) & " uses " & f.size & " bytes." ShowFolderSize = s End Function
Bonjour chez toiFor files, returns the size, in bytes, of the specified file. For folders, returns the size, in bytes, of all files and subfolders contained in the folder.![]()
Je préfère alors le "long discours", car tu dis vouloir traiter par des fonctions de l'Api et viens maintenant avec FSO !
Si ce n'est qu'une allusion pour "comparer" les "performances", ma réponse va être très très très claire.
Lorsque l'on utilise FSO, on charge énormément de choses. En "cachette", certes, mais au demeurant très lourdes. Bien plus lourdes que le code que l'on aurait à écrire pour éviter ce "fardeau".
Si ton "but" est de charger, pourvu que cela "ne se voit pas", voilà une étrange manière de poser un regard sur le développement informatique.
C'est un peu comme si tu te faisais un énorme "couteau suisse", que tu te "trimbalerais" (en le cachant ou non) pour en utiliser ici le tire-bouchon, là la scie, là l'ouvre-boîte, là le tournevis etc ...
Et si, de surcroît, tu dois passer par un sas de contrôle, ton couteau suisse ne passera pas (tel est le cas sur ma machine et bien d'autres, où rien de VBS ne peut passer).
Partager