如题所述
Public Function GetFolderSize(Folder As String) As Long
'取得文件夹的大小,包含子目录
On Error GoTo er
Dim Tmp As String
Dim TotalSize As Long
Dim FolderBuff() As String
Dim FolderMax As Long
Dim BuffMax As Long
cur_Folder = IIf(Right(Folder, 1) = "\", Folder, Folder & "\")
Tmp = Dir(cur_Folder & "*.*", vbDirectory)
Do Until Tmp = ""
If Tmp <> "." And Tmp <> ".." Then
If VBA.GetAttr(cur_Folder & Tmp) = vbDirectory Then '目录
FolderMax = FolderMax + 1
If FolderMax >= BuffMax Then
BuffMax = BuffMax + 1000
ReDim Preserve FolderBuff(BuffMax)
End If
FolderBuff(FolderMax) = cur_Folder & Tmp
Else
TotalSize = TotalSize + FileLen(cur_Folder & Tmp)
End If
End If
Tmp = Dir()
Loop
For i = 1 To FolderMax
TotalSize = TotalSize + GetFolderSize(FolderBuff(i)) '递归目录
Next i
er:
GetFolderSize = TotalSize
Erase FolderBuff
End Function
Private Sub Command1_Click()
'调试部分,供参考
Dim Folder As String
Folder = VBA.Environ("windir")
foldersize = GetFolderSize(Folder)
If foldersize > 1000000000 Then
Tmp = Format(foldersize / 1000000000, "0.00") & " G"
ElseIf foldersize > 1000000 Then
Tmp = Format(foldersize / 1000000, "0.0") & " M"
ElseIf foldersize > 1000 Then
Tmp = Format(foldersize / 1000, "0.0") & " k"
Else
Tmp = Format(foldersize)
End If
MsgBox "文件夹:" & Folder & vbCrLf & "大小:" & Tmp, vbInformation
End Sub
'取得文件夹的大小,包含子目录
On Error GoTo er
Dim Tmp As String
Dim TotalSize As Long
Dim FolderBuff() As String
Dim FolderMax As Long
Dim BuffMax As Long
cur_Folder = IIf(Right(Folder, 1) = "\", Folder, Folder & "\")
Tmp = Dir(cur_Folder & "*.*", vbDirectory)
Do Until Tmp = ""
If Tmp <> "." And Tmp <> ".." Then
If VBA.GetAttr(cur_Folder & Tmp) = vbDirectory Then '目录
FolderMax = FolderMax + 1
If FolderMax >= BuffMax Then
BuffMax = BuffMax + 1000
ReDim Preserve FolderBuff(BuffMax)
End If
FolderBuff(FolderMax) = cur_Folder & Tmp
Else
TotalSize = TotalSize + FileLen(cur_Folder & Tmp)
End If
End If
Tmp = Dir()
Loop
For i = 1 To FolderMax
TotalSize = TotalSize + GetFolderSize(FolderBuff(i)) '递归目录
Next i
er:
GetFolderSize = TotalSize
Erase FolderBuff
End Function
Private Sub Command1_Click()
'调试部分,供参考
Dim Folder As String
Folder = VBA.Environ("windir")
foldersize = GetFolderSize(Folder)
If foldersize > 1000000000 Then
Tmp = Format(foldersize / 1000000000, "0.00") & " G"
ElseIf foldersize > 1000000 Then
Tmp = Format(foldersize / 1000000, "0.0") & " M"
ElseIf foldersize > 1000 Then
Tmp = Format(foldersize / 1000, "0.0") & " k"
Else
Tmp = Format(foldersize)
End If
MsgBox "文件夹:" & Folder & vbCrLf & "大小:" & Tmp, vbInformation
End Sub
温馨提示:答案为网友推荐,仅供参考
第1个回答 2010-10-23
回答:给亻尔个简单地纯VB代码这个没有包含子目录地,要有地话能够用递归 最后依据得到地数据,计算整个文件夹地大小!叫李嘉诚ljc007来吧!!!!!!