begin process at 2010 02 10 14:05:32
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

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

Auteur : Renfield

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
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



 Sources du même auteur

Source avec Zip COURS DE PILOTAGE........D'APPLICATIONS
Source avec Zip CSOCKET - REMPLACEZ WINSOCK PAR LA VERSION 2 DES API
Source avec Zip Source avec une capture COULEUR DANS UN RICHTEXTBOX SANS MODIFIER SELSTART OU SELLEN...
Source avec Zip APPEL DE POINTEUR DE FONCTIONS - API SANS LES DECLARER
Source avec Zip Source avec une capture SABNZBD+ UPLOAD DE FICHIERS NZB

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) GESTION DE PARC AUTOMOBILE AVEC SÉRIALISATION par guyr07
Source avec Zip Source avec une capture Source .NET (Dotnet) FICHIERS_CACHÉS_LECTURE_SEULE par Le Pivert
Source avec Zip Source avec une capture CHANGEUR D'ICONES par djgab21
Source .NET (Dotnet) DIRECTDISKACCESS par XelectroX
Source avec Zip Source avec une capture UTILITAIRE WAV, MID ET MP3 par SnkVrt

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture BART VOTRE BUREAU DANS UNE BARRE par alfamick
Source avec Zip Source avec une capture COMPARAISON DE DOSSIERS, FICHIERS ET TEXTE par RicoNuch
Source avec Zip FACTURATION ET GESTION DE VENTES ARTICLES par mimiZanzan
Source avec Zip Source avec une capture Source .NET (Dotnet) GÉNÉRATEUR DE FICHIER par denpx
Source avec Zip Source avec une capture Source .NET (Dotnet) INFORMATION SUR LA TAILLE DES RÉPERTOIRES ET SOUS-RÉPERTOIRE... par claudetom

Commentaires et avis

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

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

16Go, pas 28, dsl

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

Le reflexe => Codyx.org !

;)

@+

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

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

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

175 Go :s

sacré fichier !

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

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?

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.

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.

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

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,186 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales