Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GETFILESIZE - RÉCUPÉRER LA TAILLE DE FICHIERS, MÊME > 4 GO


Information sur la source

Catégorie :Fichier / Disque Classé sous : getfilesize, taille, fichiers, grands, go Niveau : Débutant Date de création : 13/07/2006 Vu : 7 359

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note


Description

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

  • 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
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

Commentaires et avis

signaler à un administrateur
Commentaire de Renfield le 13/07/2006 13:42:03 administrateur CS

pour tester, si vous n'avez pas de gros fichiers sous la main :

utilisez le code suivant, pour générer un fichier de 28Go ...

Dim hFile As Long
Dim i As Long
    hFile = CreateFile("i:\a.big", GENERIC_WRITE, 0, ByVal 0&, OPEN_ALWAYS, 0, 0)
    If hFile <> INVALID_HANDLE_VALUE Then
        For i = 0 To 3
            SetFilePointer hFile, &HFFFFFFFF, 0, FILE_CURRENT
        Next i
        SetEndOfFile hFile
        CloseHandle hFile
    End If

signaler à un administrateur
Commentaire de Renfield le 13/07/2006 13:50:30 administrateur CS

16Go, pas 28, dsl

signaler à un administrateur
Commentaire de EBArtSoft le 13/07/2006 14:30:26 administrateur CS

Le reflexe => Codyx.org !

;)

@+

signaler à un administrateur
Commentaire de Renfield le 13/07/2006 14:36:38 administrateur CS

j'y songeai...

la première chose a faire, c'est de changer d'API...
comme me l'a indiqué notre ami BruNews, CreateFile peux violer un partage de droits d'accès, et se planter.

FindFirstFile ferait donc mieux l'affaire...

je verrai cette petite modif au retour des vacances ^^

signaler à un administrateur
Commentaire de daetips le 13/07/2006 16:39:55

ca marche bien.
testé sur un fichier de 175 Go (188 978 560 980 octets)
et ca renvoi la bonne taille :)

signaler à un administrateur
Commentaire de Renfield le 13/07/2006 17:31:52 administrateur CS

175 Go :s

sacré fichier !

signaler à un administrateur
Commentaire de daetips le 13/07/2006 18:55:21

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 ;)

signaler à un administrateur
Commentaire de shadow1779 le 14/07/2006 14:49:22

:s ca existe pas une propriété .length?, sachant qu'un caractère fait un octet on est vite fixé non?

signaler à un administrateur
Commentaire de BruNews le 15/07/2006 09:22:20 administrateur CS

Une propriété suppose un objet de classe et vb n'a pas d'objet File, CFile ou autre il me semble.

signaler à un administrateur
Commentaire de yan35 le 03/11/2007 15:41:48

Merci pour cette astuce. Je l'intègre dans mes développements.  
C'est génial.

signaler à un administrateur
Commentaire de clad87 le 11/09/2008 17:30:30

Ne marche pas chez moi (sus vista), renvoie 0 :/

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Problème avec du calcul [ par Wizard17 ] SalutJe suis en train de faire une application avec détection des lecteurs et leurs taille, je calcule donc leur taille pour chacunEx : Je clique dans Lister les fichiers d'un répertoire donné et leur taille [ par seb ] Désol', je suis nouveau sous VB...Merci de me répondre, en l'occurence, je voudrais énumérer les DLLs d'un répertoire donné (c:\Windows\System) 'Overflow' avec gestion fichiers [ par Neurolog ] Salut!Je voudrais savoir pk j'obtiens ce msg d'erreur 'dépassement de capacité' lors de ce programme:--Dim Taille As IntegerDim FreeFileNumber As Curr Taille ZIP & Répertoire [ par Chuck ] J'aurais besoin de deux chose, alors sur les deux vous devez surement avoir une réponse.1. Comment connaître la taille en octés d'un répertoire (avec Connaitre la taille des fichiers attachés Outlook [ par daivil ] Bonjour tout le monde,J'ai besoin de réaliser une macro Outlook qui detecte la taille des fichiers attachés pour par exemple empecher les employés d'e Recherche de fichiers sur un réseau [ par zombapsa ] Bonjour,Comment faire pour rechercher des fichiers dont je ne connais pas le nom sur un serveur (et non pas en local) sans créer de lecteur réseau ?Av envoi de fichiers? [ par alucard1982 ] Je dois faire un formulaire qui permettrai d'envoyer sur un sites des fichiers images (jpeg, gif...), mais je d&#233;bute et m'embrouille pas mal. En Taille de dossier sur le disque [ par Jamytheboss ] Comment faire pour avoir la taille d'un dossier (pas un fichier) sur le disque. Ceci, sans &#234;tre oblig&#233; de le parcourir et de sommer la taill Taille base access limité a 2 GO ??? [ par globule ] Bonjour, Je viens de me rendre compte que la taille d'une base maximum est de 2GO avec access 2002 et ADO (si on insere des images dedant on peut atte


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,608 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.