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 880 fois - Téléchargée 39 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
18 févr. 2006 à 16:45
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
18 févr. 2006 à 22:51
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 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
19 févr. 2006 à 09:07
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 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
19 févr. 2006 à 09:08
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
19 févr. 2006 à 14:04
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.