Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - FindFirst Rekursiv


Maisinator - Do 19.11.09 20:21
Titel: FindFirst Rekursiv
Hallo,

ich möchte die größe eines Ordners auslesen. Habe im Internet schon herausgefunden, dass man das mit FindFirst, FindNext usw... machen muss. An sich ja kein Problem. Nur wie bekomme ich auch die Unterordner gezählt? Ich habe im Internet gelesen, dass man das REKURSIV machen muss. Hab aber leider keien Ahnung, was ich darunter zu verstehen habe. Kann mir jemand das vlt. erklären? (Möglichst mit Beispiel!)

DANKE!


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Mo 23.11.2009 um 09:47


Sinspin - Do 19.11.09 21:14

Wie du schon herausgefunden hast funktioniert das ganze über Rekursion.
Das bedeutet das sich eine Procedure solange immer wieder selber aufruft bis eine bestimmte Bedingung erfüllt ist. In deinem Fall ist die so genannte Abbruchbedingung das keine Unterverzeichnis im aktuellen Verzeichnis vorhanden ist.
In Pseudocode könnte das ganze so aussehen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function GetFolderSize(AStartPath: string): Int64;
var
  sr: TSearchRec; // wichtig das dies eine lokale Variable ist, denn die muss mit auf den Stack

begin
  result := 0// noch hat das Verzeichnis keine Größe
  gib mir ersten Eintrag im Verzeichnis
  (findFirst(sr, ...))
  wenn einen Eintrag gefunden
  beginne fußgesteuerte Schleife
    ist gefundener Eintrag eine Datei :
      result := result + größe der Datei // aktuelle Größe des Verzeichnisses plus der der aktuellen Datei
    if gefundener Eintrag ein Verzeichnis :
      // funktion ruft sich für das Unterverzeichnis selber auf und holt Größe des Verzeichnisses
      result := result + GetFolderSize(AStartPath+'\'+Name von Verzeichnis)
  ende der Schleife : beende wenn kein weiterer Eintrag in Verzeichniss ist (FindNext(sr))
end;


Moderiert von user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt.


Delete - Do 19.11.09 23:18

Und mit der Forensuche hat sich nichts dazu gefunden? Kann ich kaum glauben. ;)


Maisinator - Fr 20.11.09 16:33

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Und mit der Forensuche hat sich nichts dazu gefunden? Kann ich kaum glauben. ;)


Gefunden schon, aber keinen Threat, in dem das Rekursiv erklärt wird...


thepaine91 - Fr 20.11.09 17:44

rekrusiv ist letzendlich nur ein Methode die sich immer wieder selbst Aufruft...