cs_globule
Messages postés327Date d'inscriptionmardi 8 octobre 2002StatutMembreDernière intervention 6 octobre 2010
-
5 avril 2007 à 15:47
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 2010
-
6 avril 2007 à 16:54
Bonjour
Comment connaitre la taille d'un fichier, y compris ceux supérieurs à 4go
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 5 avril 2007 à 17:05
Salut,
Effectivement sous Win98xx/Me cela ne fonctionne pas..
Cela commence à partir de Windows2000...Mais il y a toujours une solution à tout problème, voir ici(je pense), commentiare de Violent_Ken
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 5 avril 2007 à 17:27
Violent Ken
Salut, malheureusement j'utilise GetFileSizeEx dans ma source également -__-
Mais j'ai la solution ;)
Ce code de Renfield devrait faire l'affaire :
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 ,
cs_globule
Messages postés327Date d'inscriptionmardi 8 octobre 2002StatutMembreDernière intervention 6 octobre 2010 6 avril 2007 à 15:09
J'avais deja trouvé ce code sur le forum. Malheureusement il ne fonctionne pas sous Vista. C'est incroyable d'avoir autant de probleme pour afficher la taille d'un fichier
violent_ken
Messages postés1812Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention26 octobre 20102 6 avril 2007 à 15:42
Violent Ken
Et avec çà, çà ne marche toujours pas ?
Option Explicit
Private Const GENERIC_READ As Long = &H80000000
Private Const FILE_SHARE_READ As Long = &H1
Private Const FILE_SHARE_WRITE As Long = &H2
Private Const OPEN_EXISTING As Long = 3
Private Const INVALID_HANDLE_VALUE As Long = -1
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" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal 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(ByVal vsFilePath As String) As Currency
Dim hFile As Long
Dim xnFileSize(1) As Long
hFile = CreateFile(vsFilePath, GENERIC_READ, FILE_SHARE_WRITE Or FILE_SHARE_READ, ByVal 0&, OPEN_EXISTING, ByVal 0&, ByVal 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 , ----
By Renfield @+