Api :convertir des octets en ko,mo,go en fonction de la valeur

Soyez le premier à donner votre avis sur cette source.

Snippet vu 48 160 fois - Téléchargée 37 fois

Contenu du snippet

A l'aide de l'api win32 StrFormatByteSize, il est possible de convertir des valeur exprimer en octés en kilo mega et gega octes, en fonction de la valeur.Exemple , 1024 -> 1,00 ko,9565656->9.12Mo.

Source / Exemple :


Private Declare Function StrFormatByteSize Lib "shlwapi" Alias "StrFormatByteSizeA" (ByVal dw As Long, ByVal pszBuf As String, ByVal cchBuf As Long) As Long

Private Sub form_load()
Dim mem As String
Dim lenmem As Long
Const valeur_en_octes As Single = 9565656 'changez la valeur ici
    mem = Space$(32)'creer un buffer
    lenmem = Len(mem)
   
   If StrFormatByteSize(valeur_en_octes, mem, lenmem) <> 0 Then
                     
     MsgBox Trim$(mem)
   
   End If
   

End Sub

A voir également

Ajouter un commentaire

Commentaires

SkyRocKo
Messages postés
174
Date d'inscription
samedi 10 mai 2003
Statut
Membre
Dernière intervention
18 février 2006
-
Salut MasterHack,

Génial cet API ! Merci

10/10
SkyRocKo
Messages postés
174
Date d'inscription
samedi 10 mai 2003
Statut
Membre
Dernière intervention
18 février 2006
-
J'ai essayé de reproduire cette fonction et voici le même code sans API à la diffèrence près que les valeurs sont arrondies à n décimales près, et non pas tronquées comme avec l'API.

Voici le code:

Public Function StrFormatByteSize(ByVal dw As Long, Optional NumDigitsAfterDecimal As Long = 2) As String
Dim sValue As String
Select Case (dw \ 1024)
Case Is >= 1024000
sValue = CStr(Round(dw / (1024 ^ 3), NumDigitsAfterDecimal)) & " Go"
Case Is >= 1000
sValue = CStr(Round(dw / (1024 ^ 2), NumDigitsAfterDecimal)) & " Mo"
Case Is >= 1
sValue = CStr(Round(dw / 1024, NumDigitsAfterDecimal)) & " Ko"
Case Is = 0
sValue = CStr(Round(dw)) & " octets"
End Select
Let StrFormatByteSize = sValue
End Function
cs_Patrice99
Messages postés
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
-
Ben voici ma fonction à moi alors :

Public Function sFormaterTailleOctets$(ByVal lTailleOctets&)

' Renvoyer une taille de fichier bien formatée dans une chaîne de caractère

' 1024 est la norme actuellement employée dans Windows,
' mais 1000 sera peut être un jour la norme
Dim sAffichage$ = sFormaterNumerique(lTailleOctets) & " octets"
Dim rNbKo! = CSng(Math.Round(lTailleOctets / 1024, 1))
If rNbKo > 0 Then sAffichage &= " (" & sFormaterNumerique(rNbKo) & " Ko"
Dim rNbMo! = CSng(Math.Round(lTailleOctets / (1024 * 1024), 1))
If rNbMo > 0 Then sAffichage &" " & sFormaterNumerique(rNbMo) & " Mo"
Dim rNbGo! = CSng(Math.Round(lTailleOctets / (1024 * 1024 * 1024), 1))
If rNbGo > 0 Then sAffichage &" " & sFormaterNumerique(rNbGo) & " Go"
If rNbKo > 0 Or rNbMo > 0 Or rNbGo > 0 Then sAffichage &= ")"
sFormaterTailleOctets = sAffichage

End Function
cs_Patrice99
Messages postés
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
-
et la fonction qui va avec :

Public Function sFormaterNumerique$(ByVal rVal!)

' Formater un numérique avec une précision d'une décimale

' Le format numérique standard est correct (séparation des milliers et plus),
' il suffit juste d'enlever la décimale inutile si 0

Dim nfi As Globalization.NumberFormatInfo = _
New Globalization.NumberFormatInfo
' Définition des spérateurs numériques
nfi.NumberGroupSeparator = " " ' Séparateur des milliers, millions...
nfi.NumberDecimalSeparator = "." ' Séparateur décimal
' 3 groupes pour milliard, million et millier
' (on pourrait en ajouter un 4ème pour les To : 1000 Go)
nfi.NumberGroupSizes = New Integer() {3, 3, 3}
nfi.NumberDecimalDigits = 1 ' 1 décimale de précision
sFormaterNumerique = rVal.ToString("n", nfi) ' n : numérique général
' Enlever la décimale si 0
sFormaterNumerique = sFormaterNumerique.Replace(".0", "")

End Function
BZY1
Messages postés
214
Date d'inscription
jeudi 10 mars 2005
Statut
Membre
Dernière intervention
12 avril 2008
-
Dans le meme genre tu as GetFileSize (va voir sur allapi.net si tu connais pas, il y a un bon exemple) a+

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.