CONNAITRE LA TAILLE D'UN DOSSIER OU D'UN FICHIER A L'OCTET PRÈS..
cs_Stephane
Messages postés550Date d'inscriptionvendredi 5 janvier 2001StatutMembreDernière intervention23 septembre 2006
-
1 nov. 2005 à 15:04
cs_PaTaTe
Messages postés2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 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.
cs_PaTaTe
Messages postés2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 18 juin 2006 à 23:36
J'essayerais des ke l'ocaz se presente. Merci pour l'infos.
soldier8514
Messages postés295Date d'inscriptionvendredi 20 décembre 2002StatutMembreDernière intervention24 janvier 20141 18 juin 2006 à 21:24
ben c paceke ta pas essayé avec un fichier de plus de 4 giga
cs_PaTaTe
Messages postés2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 18 juin 2006 à 20:34
J'ai jamais eu de problème pourtant ...
soldier8514
Messages postés295Date d'inscriptionvendredi 20 décembre 2002StatutMembreDernière intervention24 janvier 20141 18 juin 2006 à 20:04
marche pas avec les fichiers de plusieurs Giga octets (ça retourne des nombres négatif )
cs_PaTaTe
Messages postés2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 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és796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 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és134Date d'inscriptionsamedi 19 octobre 2002StatutMembreDerniè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és7Date d'inscriptionlundi 13 novembre 2000StatutMembreDerniè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és7Date d'inscriptionlundi 13 novembre 2000StatutMembreDerniè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és134Date d'inscriptionsamedi 19 octobre 2002StatutMembreDerniè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és480Date d'inscriptionjeudi 6 mai 2004StatutMembreDernière intervention 3 septembre 20071 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és59Date d'inscriptionmercredi 8 octobre 2003StatutMembreDernière intervention22 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és550Date d'inscriptionvendredi 5 janvier 2001StatutMembreDernière intervention23 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.
18 juin 2006 à 23:36
18 juin 2006 à 21:24
18 juin 2006 à 20:34
18 juin 2006 à 20:04
23 mai 2006 à 10:53
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.
6 nov. 2005 à 01:05
2 nov. 2005 à 14:25
@++
Otpitech ;)
2 nov. 2005 à 14:13
2 nov. 2005 à 14:00
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..
2 nov. 2005 à 13:11
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 ;)
1 nov. 2005 à 18:20
1 nov. 2005 à 16:01
1 nov. 2005 à 15:04
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
++