取得某個目錄底下所有檔案大小總和

原始來源: cww

含目錄底下的子目錄,求得其所有檔案大小之總和
其第二個參數的目的是起始Static型態的totbyte, 呼叫它時,請不要傳參數進去


Private Sub Command1_Click()
Dim tot As Long
tot = GetDirTotalByte("c:\tools\")
Debug.Print tot
End Sub
Private Function GetDirTotalByte(CurrentPath As String, Optional i As Long) As Long
   Static totbyte As Long
   Dim nI As Integer, nDirectory As Integer
   Dim sFileName As String, sDirectoryList() As String
   'Initial totbyte, if it is not the Recursive call the function
   If i <> 1 Then
      totbyte = 0
   End If
   'First list all normal files in this directory
   sFileName = Dir(CurrentPath, vbNormal + vbHidden + vbReadOnly + vbSystem + vbArchive)
   Do While sFileName <> ""
      totbyte = totbyte + FileLen(CurrentPath + sFileName)
      sFileName = Dir
   Loop
   'Next build temporary list of subdirectories
   sFileName = Dir(CurrentPath, vbDirectory)
    Do While sFileName <> ""
       'Ignore current and parent directories
       If sFileName <> "." And sFileName <> ".." Then
          'Ignore nondirectories
           If GetAttr(CurrentPath & sFileName) _
                 And vbDirectory Then
              nDirectory = nDirectory + 1
              ReDim Preserve sDirectoryList(nDirectory)
              sDirectoryList(nDirectory) = CurrentPath & sFileName
           End If
       End If
       sFileName = Dir
     Loop
    'Recursively process each directory
     For nI = 1 To nDirectory
         GetDirTotalByte sDirectoryList(nI) & "\", 1
     Next nI
     GetDirTotalByte = totbyte
    End Function