Getfilesize - récupérer la taille de fichiers, même > 4 go

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 399 fois - Téléchargée 26 fois

Contenu du snippet

Une mini source pour répondre a une question du Forum... Une fonction "utile".

FileLen permet de récuperer la taille des fichiers <= 4Go (capacité d'un Long)
l'API GetFileSizeEx, ferait directement l'affaire, mais n'est pas présent sur tous les OS.

j'utilises donc l'API GetFileSize, qui fournit le résultat dans deux Long (High & Low) qu'il suffit de rassembler

Source / Exemple :


Private Const FILE_SHARE_READ As Long = &H1
Private Const GENERIC_READ As Long = &H80000000
Private Const OPEN_EXISTING As Long = 3
Private Const OPEN_ALWAYS As Long = 4
Private Const INVALID_HANDLE_VALUE As Long = &HFFFFFFFF

Private Declare Function APIGetFileSize Lib "kernel32.dll" Alias "GetFileSize" (ByVal hFile As Long, ByRef lpFileSizeHigh As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Function CreateFile Lib "kernel32.dll" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByRef lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

Public Function GetFileSize(ByRef vsFilePath As String) As Currency
Dim hFile As Long
Dim xnFileSize(1) As Long
    hFile = CreateFile(vsFilePath, GENERIC_READ, FILE_SHARE_READ, ByVal 0&, OPEN_EXISTING, 0, 0)
    If hFile <> INVALID_HANDLE_VALUE Then
        xnFileSize(0) = APIGetFileSize(hFile, xnFileSize(1))
        CopyMemory GetFileSize, xnFileSize(0), LenB(GetFileSize)
        GetFileSize = GetFileSize * 10000
        CloseHandle hFile
    End If
End Function

A voir également

Ajouter un commentaire

Commentaires

Messages postés
42
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
24 août 2015

Ne marche pas chez moi (sus vista), renvoie 0 :/
Messages postés
185
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
20 juin 2013

Merci pour cette astuce. Je l'intègre dans mes développements.
C'est génial.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
Une propriété suppose un objet de classe et vb n'a pas d'objet File, CFile ou autre il me semble.
Messages postés
706
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
29 septembre 2013

:s ca existe pas une propriété .length?, sachant qu'un caractère fait un octet on est vite fixé non?
Messages postés
142
Date d'inscription
jeudi 10 juillet 2003
Statut
Membre
Dernière intervention
10 novembre 2007

oui, j'ai utilisé la fonction que tu a donné pour générer un fichier en faisant une boucle de 0 a 43 au lieu de 0 à 3 ;)
Afficher les 11 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.