Avoir la taille d'un fichier avec la bonne unité

Soyez le premier à donner votre avis sur cette source.

Vue 3 439 fois - Téléchargée 247 fois

Description

cette chtite fonction permet d'avoir la taille d'un fichier avec la bonne unité. Elle renvoie une chaine de caractère avec la taille et l'unité la plus appropriée.

Source / Exemple :


Public Function TailleFic(chemin As String) As String

Dim valeur As Variant
Dim unit As String
'taille du fichier en octets
valeur = FileLen(chemin)
 
' conversion de la taille dans l'unité appropriée
If valeur < 1000 Then
    unit = "octets"
ElseIf valeur / 1024 < 1000 Then
    unit = "Ko"
    valeur = Left(valeur / 1024, 4)
ElseIf valeur / 1024 ^ 2 < 1000 Then
    unit = "Mo"
    valeur = Left(valeur / 1024 ^ 2, 5)
ElseIf valeur / 1024 ^ 3 < 1000 Then
    unit = "Go"
    valeur = Left(valeur / 1024 ^ 3, 4)
End If

TailleFic = valeur & " " & unit

End Function

Conclusion :


Il faut l'appeller avec en paramètre un chaine de caractère contenant un nom de fichier complet. Exemple:
chemin = "C:\Program Files\setup.exe"
retval = TailleFic (chemin)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
21
Date d'inscription
mardi 17 juillet 2007
Statut
Membre
Dernière intervention
17 décembre 2008

Voici mon code :

Function ConvertFileLength(ByVal length As Long, Optional ByVal maxdecimal As Integer = 2) As String
' Convertis la taille d'un fichier en octets sous forme d'une chaîne de caractères avec l'unité correspondante
Dim SizeString As String = Nothing If length > 1073741824 Or length 1073741824 Then SizeString length / 1073741824 & " Go" If length > 1048576 And length < 1073741824 Or length 1048576 Then SizeString length / 1048576 & " Mo" If length > 1024 And length < 1048576 Or length 1024 Then SizeString length / 1024 & " Ko"
If length < 1024 Then SizeString = length & " octets"
If SizeString.Contains(",") Then
Dim parts() = Split(SizeString, ",")
Dim parts_() = Split(parts(1), " ")
Dim decimals As Integer If maxdecimal 0 Then maxdecimal 1
If parts_(0).ToString.Length < 2 Then decimals = parts_(0).ToString If parts_(0).ToString.Length 3 Then decimals parts_(0).ToString.Remove(1, parts_(0).ToString.Length - 1)
If parts_(0).ToString.Length > 3 Then decimals = parts_(0).ToString.Remove(maxdecimal, parts_(0).ToString.Length - maxdecimal)
SizeString = parts(0) & "," & decimals & " " & parts_(1)
End If
Return SizeString
End Function

L'option maxdecimal évite d'avoir un nombre inconsidéré de décimales ^^
Messages postés
134
Date d'inscription
samedi 19 octobre 2002
Statut
Membre
Dernière intervention
3 janvier 2009

Le problème vient de FileLen. Je viens de faire le test avec un iso de Debian (Vresion DVD) 4,36 Go (4.685.895.680 o) et FileLen me retourne ceci : 390928485

Il y a une petit différente !

Il sont passé où les 4,2 Go manquant ????
Messages postés
295
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
24 janvier 2014
1
ok donc je teste avec une archive iso de 3,8 Go ( image que j'ai fait de mon dernier dvd de nine inch nail dégotté dans les bacs ) _

et vla-Da-DAM !!! çà affiche : -130365440 octets


sans commentaires ...
Messages postés
134
Date d'inscription
samedi 19 octobre 2002
Statut
Membre
Dernière intervention
3 janvier 2009

Pas mal ! Mias je trouve que ta fonction n'est pas juste ! C'est vrais en informatique les unité vont de 1024 en 1024 !

Pour toi voila la fonction que j'ai créer qui fiat la même chose que la tienne ! De plus elle gére plus unité (c pour le futur)

Voila ma source :

Function unite(taille As Long) As String

Dim tabunite
Dim i As Integer

tabunite = Array("o", "Ko", "Mo", "Go", "To", "Po", "Eo", "Zo", "Yo")
i = 0

Do While taille >= 1024 And i < 8

taille = taille / 1024
i = i + 1

Loop

unite = Round(taille, 2) & " " & tabunite(i)

End Function

@++

Optitech
Messages postés
962
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
2 août 2010

Ouin pas mal
Afficher les 6 commentaires

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.