IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Taille sur le disque d'un dossier


Sujet :

VB 6 et antérieur

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 245
    Points : 320
    Points
    320
    Par défaut Taille sur le disque d'un dossier
    Bonjour,

    J'ai utilisé le code présent dans la FAQ permettant de connaitre la taille d'un dossier.

    Cela fonctionne très bien sauf qu'il me calcule la taille réelle du dossier et non la "taille sur le disque".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Set fs = New FileSystemObject
    Set f = fs.GetFolder("c:\program files")
    taille = f.size
    Le f.size me renvoie la taille réelle et non la taille sur le disque comme le fait la boite de dialogue des propriétés du dossier/fichier dans l'explorateur windows.

    Comment faire pour calculer cette taille (qui peut être quelques dizaines de MB supérieure quand le répertoire contient beaucoup de petits fichiers) ?????


    Merci.

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    Je ne voudrais pas dire (j'en dis beaucoup après un repas ) de bêtises, mais la taille que tu cherches à dféterminer dépend entre autres à mon sens du système de fichiers (FATxx, NTFS,...) et de la taille des clusters...
    Tu vas là devoir (si j'ai raison) te lancer dans un joli calcul mathématique, après avoir déterminé les éléments dont il s'agit ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 245
    Points : 320
    Points
    320
    Par défaut
    Ce que j'aimerais bien, c'est avoir la même chose que lorsque je fait un clic droit sur un répertoire dans l'explorateur et si un sous répertoire est illisible (pas les droits), c'est qu'il l'ignore et passe au sous-répertoire suivant.

    dans mon cas f.size m'affiche "accès resusé" et plante si un des fichiers ou sous-répertoire ne dispose pas des droits d'accès adéquats.

  4. #4
    Membre actif
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Points : 207
    Points
    207
    Par défaut
    voici ce que tu cherche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Public Function DirSize(path As String)
       Dim fp As FILE_PARAMS
     
       With fp
          .sFileRoot = QualifyPath(path) 'start path
          .sFileNameExt = "*.*"                'files of interest
          .bRecurse = True         'True = recurse
       End With
     
       Call GetDirectorySize(fp.sFileRoot, fp)
       DirSize = fp.nFileSize 'utiliser nSearched : le nombre...
    End Function
     
    Private Function QualifyPath(sPath As String) As String
       If Right$(sPath, 1) <> "\" Then
          QualifyPath = sPath & "\"
       Else
          QualifyPath = sPath
       End If
     
    End Function
     
    Private Sub GetDirectorySize(sRoot As String, fp As FILE_PARAMS)
     
       Dim wfd As WIN32_FIND_DATA
       Dim hFile As Long
     
       hFile = FindFirstFile(sRoot & "*.*", wfd)
     
       If hFile <> INVALID_HANDLE_VALUE Then
     
        Do
            If Asc(wfd.cFileName) <> vbDot Then
                If (wfd.dwFileAttributes And vbDirectory) Then
                   If fp.bRecurse Then
                      GetDirectorySize sRoot & TrimNull(wfd.cFileName) & "\", fp
                   End If  'If fp.bRecurse
                Else
                   fp.nFileCount = fp.nFileCount + 1
                   fp.nFileSize = fp.nFileSize + _
                                ((wfd.nFileSizeHigh * _
                                 (MAXDWORD + 1)) + _
                                  wfd.nFileSizeLow)
                End If 'If WFD.dwFileAttributes
            End If  'If Asc(wfd.cFileName)
     
            fp.nSearched = fp.nSearched + 1
        Loop While FindNextFile(hFile, wfd)
     
        End If 'If hFile
        Call FindClose(hFile)
     
    End Sub
    Private Function TrimNull(startstr As String) As String
       TrimNull = Left$(startstr, lstrlen(StrPtr(startstr)))
    End Function
    sans oublier de declarer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Private Const INVALID_HANDLE_VALUE As Long = -1
    Private Type FILE_PARAMS
       bRecurse          As Boolean
       nFileCount        As Long
       nFileSize         As Currency '64 bit value
       nSearched         As Long
       sFileNameExt      As String
       sFileRoot         As String
    End Type
    Private Type WIN32_FIND_DATA
       dwFileAttributes As Long
       ftCreationTime As FILETIME
       ftLastAccessTime As FILETIME
       ftLastWriteTime As FILETIME
       nFileSizeHigh As Long
       nFileSizeLow As Long
       dwReserved0 As Long
       dwReserved1 As Long
       cFileName As String * MAX_PATH
       cAlternate As String * 14
    End Type
     
    Private Declare Function FindFirstFile Lib "kernel32" _
       Alias "FindFirstFileA" _
      (ByVal lpFileName As String, _
       lpFindFileData As WIN32_FIND_DATA) As Long
    Private Declare Function FindClose Lib "kernel32" _
      (ByVal hFindFile As Long) As Long
     
    Private Declare Function FindNextFile Lib "kernel32" _
       Alias "FindNextFileA" _
      (ByVal hFindFile As Long, _
       lpFindFileData As WIN32_FIND_DATA) As Long
    voilà, on mets tout cas dans un module, et on appelle DirSize().

    merci vbnet, ma bible : http://vbnet.mvps.org/index.html?cod...ectorysize.htm

Discussions similaires

  1. Taille sur disque de vista
    Par Ndugu dans le forum Installation
    Réponses: 6
    Dernier message: 15/04/2009, 23h26
  2. Réponses: 8
    Dernier message: 23/05/2007, 15h33
  3. Réponses: 3
    Dernier message: 03/08/2006, 16h38
  4. Réponses: 7
    Dernier message: 08/06/2005, 11h04
  5. Infos sur la taille d'un disque
    Par Mille sabords dans le forum Windows
    Réponses: 4
    Dernier message: 10/03/2005, 09h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo