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

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

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.