CONNAITRE LA TAILLE D'UN DOSSIER OU D'UN FICHIER A L'OCTET PRÈS..

cs_Stephane Messages postés 550 Date d'inscription vendredi 5 janvier 2001 Statut Membre Dernière intervention 23 septembre 2006 - 1 nov. 2005 à 15:04
cs_PaTaTe Messages postés 2126 Date d'inscription mercredi 21 août 2002 Statut Contributeur Dernière intervention 19 février 2021 - 18 juin 2006 à 23:36
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/34429-connaitre-la-taille-d-un-dossier-ou-d-un-fichier-a-l-octet-pres

cs_PaTaTe Messages postés 2126 Date d'inscription mercredi 21 août 2002 Statut Contributeur Dernière intervention 19 février 2021 2
18 juin 2006 à 23:36
J'essayerais des ke l'ocaz se presente. Merci pour l'infos.
soldier8514 Messages postés 295 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 24 janvier 2014 1
18 juin 2006 à 21:24
ben c paceke ta pas essayé avec un fichier de plus de 4 giga
cs_PaTaTe Messages postés 2126 Date d'inscription mercredi 21 août 2002 Statut Contributeur Dernière intervention 19 février 2021 2
18 juin 2006 à 20:34
J'ai jamais eu de problème pourtant ...
soldier8514 Messages postés 295 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 24 janvier 2014 1
18 juin 2006 à 20:04
marche pas avec les fichiers de plusieurs Giga octets (ça retourne des nombres négatif )
cs_PaTaTe Messages postés 2126 Date d'inscription mercredi 21 août 2002 Statut Contributeur Dernière intervention 19 février 2021 2
23 mai 2006 à 10:53
Pour calculer la taille en octets, mega-octets, ... automatiquement moi j'utilise les APIs

Exemple :

Public Enum CalcType
sFichier = 0
sValeur = 1
End Enum
Private Declare Function StrFormatByteSize Lib "shlwapi" Alias "StrFormatByteSizeA" (ByVal dw As Long, ByVal pszBuf As String, ByVal cchBuf As Long) As Long


Public Function OKoMoGo(FichierOuTaille As Variant, Valeur As CalcType) As String
Dim Mem As String
Dim LenMem As Long
Dim Taille As Single
Select Case Valeur
Case sFichier: Taille = FileLen(FichierOuTaille)
Case sValeur: Taille = FichierOuTaille
End Select
Mem = Space(32)
LenMem = Len(Mem)
If StrFormatByteSize(Taille, Mem, LenMem) <> 0 Then OKoMoGo Trim(Mem) Else OKoMoGo Empty
End Function

Cette fonction convertie la taille et adjoint l'unité adequate.
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
6 nov. 2005 à 01:05
Vois ma source (histoire de t'inspirer) postée le 16/05/2002 qui traitait la question de la taille d'un répertoire via 2 méthodes : récursivité et FileSystem Object.
Optitech Messages postés 134 Date d'inscription samedi 19 octobre 2002 Statut Membre Dernière intervention 3 janvier 2009
2 nov. 2005 à 14:25
Ici je n'utilsie pas une troncature mais l'arrondie !

@++

Otpitech ;)
the fake Messages postés 7 Date d'inscription lundi 13 novembre 2000 Statut Membre Dernière intervention 2 novembre 2005
2 nov. 2005 à 14:13
Wahouh optitech, j'ai mis du temps a comprendre ton code, mais ca y est, il marche nickel, troncature et tout, merci beaucoup (en plus, je vous le cache pas, c'est la 1 ere fois que j'utilise une fonction et une boucle dans mes progz ^^)donc ca m'a permis de decouvrir !! voila je l'applique pour la taille des fichiers et je re-up la source.. et encore une fois MERCI !!!
the fake Messages postés 7 Date d'inscription lundi 13 novembre 2000 Statut Membre Dernière intervention 2 novembre 2005
2 nov. 2005 à 14:00
Oui je sais je voulais faire une troncature, seuleument je suis pas super fort en visual basic, et puis j'ai pas bien le temps la.

Non les tailles octet ==> Mo se convertissent comme ca :
1 mo 1024 * 1024 Octets 1048576 Octets, ensuite Visual Basic récupère la taille du dossier en octets, verifie s'il est plus petit ou plus grand que 1024, et ainsi de suite, afin de trouver par quoi il faut diviser, dans l'exemple du Mo il devra diviser par 1048576, donc logiquement il devrait pas y avoir de fautes !!

> optitech, je regarde ton code de suite, merci..
Optitech Messages postés 134 Date d'inscription samedi 19 octobre 2002 Statut Membre Dernière intervention 3 janvier 2009
2 nov. 2005 à 13:11
SLt !

Voila ton code en amélioré !


Function unite(taille As Double) As String
'Taille doit être en octet

Dim tabunite 'On décalre une variable qui va être un tableau
Dim i As Integer 'Un compteur

tabunite = Array("o", "Ko", "Mo", "Go", "To", "Po", "Eo","Zo","Yo") 'Le tbaleau de unités
i = 0 'Initialisation du compteur

Do While taille >= 1024 And i < 8 'Début de la boucle

taille = taille / 1024 'On divise
i = i + 1 'on rajoute 1 au compteur

Loop 'Fin de la boucle

unite = Round(taille, 2) & " " & tabunite(i) 'On retourne la taille convertie avec l'unité dans une string

End Function

Pour effectuer une conversion il vous suffit d'appeller la function avec la taille à convertir en paramètre :

Msgbox unite(1208925819614629174706176) 'ce nombe vaut un Yo !

Rappel : pour voir la taille d'un fihcier en octect : FileLen(Fichier)

@++

Optitech ;)
jrbleboss Messages postés 480 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 3 septembre 2007 1
1 nov. 2005 à 18:20
Bin oui c ce que je voulais dire : c'est bien de convertir mais il faut peut etre arrondir ou tronquer !
cs_schtroumf Messages postés 59 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 22 juillet 2008
1 nov. 2005 à 16:01
J'ai aussi une remarque à faire sur ta capture sans avoir vu le code. Dans la petite fenetre tu indique une taille de 47,... Mo mais il y a a mon gout un peut trop de décimales vu que la tu descends au dessous de l'octet... Dis moi si je me plante
cs_Stephane Messages postés 550 Date d'inscription vendredi 5 janvier 2001 Statut Membre Dernière intervention 23 septembre 2006
1 nov. 2005 à 15:04
salut

j'ai pas testé ta source mais au vue de la capture, il y a un petit probleme :

comme tu la dit :
1 Ko 1024 et 1Mo 1024 Ko etc...
ainsi si tu exprime la taille d'un dossier en Ko, Mo ou Go, la 3eme décimale ne correspond pas au sous-multiple. ex :
si tu a un dossier de 2,541357 Mo ca ne veut pas dire que le taille est 2541357 octets

Donc l'affichage en multiple ne permet pas de connaitre la taille à l'octet pret.

Si tu as converti les tailles octet->Mo en divisant par 1 000 000 ... ce probleme ne se pose plus, mais a ce moment la, la taille affichée n'est pas <<juste>>, c'est comme si 1 tonne = 900 kg :)

Donc voila, pour etre à l'octet pret, je pense que le mieux est d'exprimer la taille en octet.
Après pour faciliter la lecture tu peux séparer les milliers :
2 245 541 octets
on voit rapidement que ca vaut a peu pres 2,2Mo
Tu dois pouvoir faire ca avec la fonction format je pense.

voila
++
Rejoignez-nous