Taille d'un fichier ?

cs_globule Messages postés 327 Date d'inscription mardi 8 octobre 2002 Statut Membre Dernière intervention 6 octobre 2010 - 5 avril 2007 à 15:47
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 - 6 avril 2007 à 16:54
Bonjour

Comment connaitre la taille d'un fichier, y compris ceux supérieurs à 4go

Merci

14 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 avril 2007 à 15:52
Bonjour

Je n'ai pas entendu dire que la fonction FileLen de VB avait des limitations autres que celles de Windows.
L'as-tu essayée ?
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
5 avril 2007 à 15:56
Salut,

Bonjour Jmfmarques

Regarde aussi avec l'api : GetFileSize, car il me semble que FileLen et du type Long, ce qui limitera la lecture d'un fichier de 2 Go

A+
Exploreur

 
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
5 avril 2007 à 16:04
Salut,

Euh...pardon c'est GetFileSizeEx

A+
Exploreur

 
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
5 avril 2007 à 16:12
Salut:
http://vb.developpez.com/faq/?page=Fichiers#ConvertOctets

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
5 avril 2007 à 16:42
Salut,

Drikce06 >> Je viens de regarder ton lien(pas mal) mais il y a un petit problème quand je teste un fichier de 5 Go...il me retourne 1,07 Go...

Par contre je viens de tester autre chose et cela fonctionne ici

Bon il faut améliorer le code pour avoir une bonne lecture, du moins convertir la lecture(O, Mo, Go...)

A+
Exploreur

 
0
cs_globule Messages postés 327 Date d'inscription mardi 8 octobre 2002 Statut Membre Dernière intervention 6 octobre 2010
5 avril 2007 à 16:58
GetFileSizeEx n'est pas present sur tous les OS, donc inutilisable
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
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

A+
Exploreur

 
0
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
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 ,

----

Hex Editor VB
0
cs_globule Messages postés 327 Date d'inscription mardi 8 octobre 2002 Statut Membre Derniè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
0
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
6 avril 2007 à 15:10
Violent Ken

Quel est le problème avec Vista ?







Hex Editor VB
0
cs_globule Messages postés 327 Date d'inscription mardi 8 octobre 2002 Statut Membre Dernière intervention 6 octobre 2010
6 avril 2007 à 15:32
Ca retourne toujours 0 car la fonction CreateFile retourne -1
0
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
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
@+

Hex Editor VB
0
cs_globule Messages postés 327 Date d'inscription mardi 8 octobre 2002 Statut Membre Dernière intervention 6 octobre 2010
6 avril 2007 à 16:53
Ca fonctionne

Merci beaucoup
0
violent_ken Messages postés 1812 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 26 octobre 2010 2
6 avril 2007 à 16:54
Violent Ken

Ok ;)
De rien, @+



Hex Editor VB
0
Rejoignez-nous