Taille d'un fichier ?

Messages postés
327
Date d'inscription
mardi 8 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2010
- - Dernière réponse : violent_ken
Messages postés
1822
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
Afficher la suite 

14 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
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 ?
Commenter la réponse de jmfmarques
Messages postés
4824
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
11
0
Merci
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

 
Commenter la réponse de cs_Exploreur
Messages postés
4824
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
11
0
Merci
Salut,

Euh...pardon c'est GetFileSizeEx

A+
Exploreur

 
Commenter la réponse de cs_Exploreur
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
5
0
Merci
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:
Commenter la réponse de drikce06
Messages postés
4824
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
11
0
Merci
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

 
Commenter la réponse de cs_Exploreur
Messages postés
327
Date d'inscription
mardi 8 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2010
0
Merci
GetFileSizeEx n'est pas present sur tous les OS, donc inutilisable
Commenter la réponse de cs_globule
Messages postés
4824
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
11
0
Merci
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

 
Commenter la réponse de cs_Exploreur
Messages postés
1822
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
0
Merci
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
Commenter la réponse de violent_ken
Messages postés
327
Date d'inscription
mardi 8 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2010
0
Merci
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
Commenter la réponse de cs_globule
Messages postés
1822
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
0
Merci
Violent Ken

Quel est le problème avec Vista ?







Hex Editor VB
Commenter la réponse de violent_ken
Messages postés
327
Date d'inscription
mardi 8 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2010
0
Merci
Ca retourne toujours 0 car la fonction CreateFile retourne -1
Commenter la réponse de cs_globule
Messages postés
1822
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
0
Merci
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
Commenter la réponse de violent_ken
Messages postés
327
Date d'inscription
mardi 8 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2010
0
Merci
Ca fonctionne

Merci beaucoup
Commenter la réponse de cs_globule
Messages postés
1822
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
0
Merci
Violent Ken

Ok ;)
De rien, @+



Hex Editor VB
Commenter la réponse de violent_ken