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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 989 fois - Téléchargée 28 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
cs_clad87 Messages postés 42 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 24 août 2015
11 sept. 2008 à 17:30
Ne marche pas chez moi (sus vista), renvoie 0 :/
yan35 Messages postés 185 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 20 juin 2013
3 nov. 2007 à 15:41
Merci pour cette astuce. Je l'intègre dans mes développements.
C'est génial.
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 juil. 2006 à 09:22
Une propriété suppose un objet de classe et vb n'a pas d'objet File, CFile ou autre il me semble.
shadow1779 Messages postés 706 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 29 septembre 2013
14 juil. 2006 à 14:49
:s ca existe pas une propriété .length?, sachant qu'un caractère fait un octet on est vite fixé non?
daetips Messages postés 142 Date d'inscription jeudi 10 juillet 2003 Statut Membre Dernière intervention 10 novembre 2007
13 juil. 2006 à 18:55
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 ;)

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.