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