Autor Beitrag
Maisinator
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167

Win XP HE SP3, Win Vista HP SP2
Delphi ;-)
BeitragVerfasst: Do 19.11.09 20:21 
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

_________________
Das Unmögliche wagen, um das Mögliche möglich zu machen...
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1337
Erhaltene Danke: 119

Win 10
RIO, CE, Lazarus
BeitragVerfasst: 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:
ausblenden 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.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 19.11.09 23:18 
Und mit der Forensuche hat sich nichts dazu gefunden? Kann ich kaum glauben. ;)
Maisinator Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167

Win XP HE SP3, Win Vista HP SP2
Delphi ;-)
BeitragVerfasst: 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...

_________________
Das Unmögliche wagen, um das Mögliche möglich zu machen...
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Fr 20.11.09 17:44 
rekrusiv ist letzendlich nur ein Methode die sich immer wieder selbst Aufruft...