Jag hittade följande kod på Tips & tricks som skall peräkna en mapps storlek, inklusive undermappar. Jag får den dock bara att kolla filerna i mappen och ej dess underkataloger. Skall något ändras eller läggas till ? Du måsta avsluta med "\" Om jag inte lägger till \ så får jag svaret 0 byte, men om jag lägger till \ så returnerar programmet dock bara filerna direkt under sökvägen och kollar inte alla underkataloger så det räcker inte med att lägga till \ Har skrivit om det till en funktionen som även hantera underliggande kataloger: Tack Andreas men var ska jag lägga koden. Ska jag använda den tillsammans med min gamla kod. Jag har provat att infoga en ny modul och lägga koden där och jag har infogat den under General men inget fungerar. Underkatalogerna kommer inte med. Lägg koden i en modul. Anropa den så här från formuläret på(ersätt gammal kod): Kannon funktion, tack Andreas! Varsegod. Kom på idén när ni postade era inlägg. Det är ju problematiskt att använda dir funktionen i en rekursiv funktion. Var därför tvungen att lagra dem i en array. För att sedan anropa funktionen med dessa.En mapps storlek
Dim FileName As String
Dim FileSize As Currency
Dim Directory As String
Directory = Text2.Text 'Ange i vilken katalog du vill beräkna storleken
FileName = Dir$(Directory & "*.*")
FileSize = 0 ' Sätter filstorleken till 0
Do While FileName <> "" ' Startar Loop
FileSize = FileSize + FileLen(Directory & FileName)
FileName = Dir$ ' Hämtar Info
Loop
Text1.Text = "Totalt använda byte(s) = " + Str$(FileSize) Sv: En mapps storlek
Så text2.text ="C:\Program\Microsoft Visual Studio\" ' <---
tDSv: En mapps storlek
Sv: En mapps storlek
<code>
Public Function DirSize(ByVal Directory As String) As Currency
Dim FileName As String
Dim SubDirs() As Variant
Dim Count As Long
Dim Index As Long
FileName = Dir$(Directory & "*.*", vbDirectory)
If FileName = "." Then
Dir$ '..
FileName = Dir$
End If
Do While Len(FileName)
FileName = Directory & FileName
If GetAttr(FileName) And vbDirectory Then
ReDim Preserve SubDirs(Count)
SubDirs(Count) = FileName & "\"
Count = Count + 1
Else
DirSize = DirSize + FileLen(FileName)
End If
FileName = Dir$()
Loop
If Count Then
For Index = 0 To Count - 1
DirSize = DirSize + DirSize(SubDirs(Index))
Next
End If
End Function
</code>
Reviderad 2002-07-09 01:17
Hanterar nu även root. Vilket dir och dir$ inte retunerar "." och "..".Sv: En mapps storlek
Sv: En mapps storlek
<code>
Text1.Text = "Totalt använda byte(s) = " & DirSize(Text2.Text)
</code>Sv: En mapps storlek
Byggde ut den lite till för eget bruk, här är den.
Public Enum unUnit
unByte = 0
unKb = 1
unMB = 2
End Enum
Public Function DirSize(ByVal Directory As String, Optional nUnit As unUnit) As Currency
Dim FileName As String
Dim SubDirs() As Variant
Dim Count As Long
Dim Index As Long
Dim nRetVal As Currency
Dir$ Directory & "*.*", vbDirectory '.
Dir$ '..
FileName = Dir$
Do While Len(FileName)
FileName = Directory & FileName
If GetAttr(FileName) And vbDirectory Then
ReDim Preserve SubDirs(Count)
SubDirs(Count) = FileName & "\"
Count = Count + 1
Else
DirSize = DirSize + FileLen(FileName)
End If
FileName = Dir$()
Loop
If Count Then
For Index = 0 To Count - 1
DirSize = DirSize + DirSize(SubDirs(Index))
Next
End If
Select Case nUnit
Case 0
DirSize = DirSize
Case 1
DirSize = DirSize / 1024
Case 2
DirSize = DirSize / 1048576
End Select
End Function
Private Sub Command1_Click()
Dim Directory As String
Directory = "D:\Mapp\"
Label1.Caption = DirSize(Directory, unByte)
Label2.Caption = Format(DirSize(Directory, unKb), "0.0")
Label3.Caption = Format(DirSize(Directory, unMB), "0.0")
End SubSv: En mapps storlek