Seite 1 von 1

Ordnergrösse ermitteln - Procedure-Rekursiv Prob. [Gelöst]

Verfasst: 29.03.2015 13:33
von TheCube
Hallo,
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 ... :bluescreen:

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

Re: Ordnergrösse ermitteln - Procedure-Rekursiv-Problem ?

Verfasst: 29.03.2015 14:15
von NicknameFJ
Hallo TheCube,

Code: Alles auswählen

        size = GetDirectorySize(path+DirectoryEntryName(dir)+"\", size) ; REKURSIV
sollte das Problem lösen.

NicknameFJ

Re: Ordnergrösse ermitteln - Procedure-Rekursiv-Problem ?

Verfasst: 29.03.2015 15:33
von TheCube
Ja, das war der Fehler, danke schön.

... an manchen Tagen sollte man besser im Bett bleiben. :D