ich habe hier aus dem Forum zwei entsprechende Procedures um die Ordnergrösse
inklusive aller Unterordner zu ermitteln. Eine Version(2) funktioniert prima, die
andere (1) gibt nur die Grösse der Files des Toplevels zurück, aber verschluckt
die Grössen der Unterordner.
Auch nach Stunden find ich nicht den kleinen feinen Unterschied warum Version1 nicht will ...

Code: Alles auswählen
; Version 1 gibt zuwenig (nur Toplevel?) zurück !
EnableExplicit
Procedure.q GetDirectorySize(path.s, size.q=0) ; Version 1: Hier wird die bisher gefundene Größe für rekursiven Aufruf wieder übergeben
Protected dir.l=ExamineDirectory(#PB_Any, path, "")
If dir
While NextDirectoryEntry(dir)
If DirectoryEntryType(dir) = #PB_DirectoryEntry_File
size+DirectoryEntrySize(dir) : Debug size
Else
If DirectoryEntryName(dir) <> "." And DirectoryEntryName(dir) <> ".."
Debug path+DirectoryEntryName(dir)+"\"
Debug size
GetDirectorySize(path+DirectoryEntryName(dir)+"\", size) ; REKURSIV
EndIf
EndIf
Wend
FinishDirectory(dir)
EndIf
ProcedureReturn size
EndProcedure
; --------------------------------------------------------------------------------
Procedure.i DirectorySize(Path.s) ; Version 2: Funktioniert
Protected Directory.i
Protected Size.i
If Right(Path, 1) <> "\" : Path + "\" : EndIf ; Pfad muss immer mit "\" enden
Directory = ExamineDirectory(#PB_Any, Path, "")
If Directory
While NextDirectoryEntry(Directory)
Select DirectoryEntryType(Directory)
Case #PB_DirectoryEntry_File
Size + DirectoryEntrySize(Directory) ; Dateigröße hinzu addieren
Case #PB_DirectoryEntry_Directory
If DirectoryEntryName(Directory) <> "." And DirectoryEntryName(Directory) <> ".."
Size + DirectorySize(Path+DirectoryEntryName(Directory)) ; Größe des Unterordners hinzu addieren REKURSIV
EndIf
EndSelect
Wend
FinishDirectory(Directory)
EndIf
ProcedureReturn Size
EndProcedure
; --------------------------------------------------------------------------------
Define.s SPath = PathRequester("Bitte Verzeichnis wählen:", "")
If SPath = "" : End : EndIf
Debug SPath+" : "+StrF(GetDirectorySize(SPath)/1024/1024,2)+" MB" ; Version 1
Debug SPath+" : "+StrF(DirectorySize(SPath)/1024/1024,2)+" MB" ; Version 2