Seite 1 von 1

Ordnergröße ermitteln

Verfasst: 14.09.2010 18:49
von Mok
...wie geht das? FileSize() gibt -2 zurück.

Gruß, Mok.

Re: Ordnergröße ermitteln

Verfasst: 14.09.2010 18:52
von STARGÅTE
Rekursive, alle unterordner durchsuchen und dann die Summe über alle Dateigrößen bilden.

u.u. musst du dann noch beachten das die Ordnerstruktur an sich Platz verbraucht.
(Daten-Größe und Größe auf Datenträger)

Re: Ordnergröße ermitteln

Verfasst: 14.09.2010 19:23
von Mok
STARGÅTE hat geschrieben:Rekursive, alle unterordner durchsuchen und dann die Summe über alle Dateigrößen bilden.
Bei Strukturen, wie dem Windows-Ordner wartet man da ja Wochen...

Re: Ordnergröße ermitteln

Verfasst: 14.09.2010 19:46
von Jilocasin
Die Wochen braucht der Explorer z.B. aber auch zum zusammenzählen.

Re: Ordnergröße ermitteln

Verfasst: 15.09.2010 00:11
von STARGÅTE
@Mok, ja wenn du die größe von C:\ wissen willst, u.u. ja !

Aber wie solls denn sonst gehen ?, Windows speichert ja nicht von allen Ordner die Größe, weil die sich ja laufend ändert.

Folgender Code benötigt ca. 90s (ohne Debugger)

Code: Alles auswählen

Procedure.q DirectorySize(Directory$, *Files.Integer, *Dirs.Integer)
  Protected Size.q
  Protected Directory = ExamineDirectory(#PB_Any, Directory$, "*")
  If Directory
    While NextDirectoryEntry(Directory)
      Select DirectoryEntryType(Directory)
        Case #PB_DirectoryEntry_Directory
          If DirectoryEntryName(Directory) <> "." And DirectoryEntryName(Directory) <> ".."
            *Dirs\i + 1
            Size + DirectorySize(Directory$+DirectoryEntryName(Directory)+"\", *Files, *Dirs)
          EndIf
        Case #PB_DirectoryEntry_File
          *Files\i + 1
          Size + DirectoryEntrySize(Directory)
      EndSelect
    Wend
    FinishDirectory(Directory)
  EndIf
  ProcedureReturn Size
EndProcedure

Size.q = DirectorySize("C:\", @Files, @Dirs)

Text$ = StrF(Size/1024/1024,3)+" MB"+#LF$
Text$ + Str(Files)+" Dateien"+#LF$
Text$ + Str(Dirs)+" Ordner"
MessageRequester("Festplatte", Text$)
---------------------------
Festplatte
---------------------------
30285.389 MB
123173 Dateien
11576 Ordner
---------------------------
OK
---------------------------
Allerding nur beim 1. mal, danach ist es schneller, weil die Daten zu den Ordner temporär gespeichert werden.