Hallo, nachdem ich lange Zeit nicht zum Programmieren gekommen bin, steh ich gerade ganz schön auf dem Schlauch und hoffe auf Eure Hilfe.
Problem:
Ich möchte eine ganze Ordnerstruktur in zwie Klassen packen, aber ich hänge gerade massiv an dem Rekursionspunkt, d.h. ich bin mir nicht ganz klar darüber, welche Parameter die Prozeduren überhaupt benötigen bzw. ob welche überflüssig sind.
In den Anhang habe ich mal den vorläufigen UML-Entwurf der beiden Klassen gepackt, damit man ungefähr eine Vorstellung hat.
Für den Algorithmus zum rekursiven Durchlaufen der Ordner habe ich diesen hier
www.delphi-fundgrube.de/faq03.htm (Abschnitt: Wie kann man alle Dateien eines Ordners mitsamt der Unterverzeichnisse ermitteln?) zur Grundlage genommen.
Hier der Quelltext der jetzigen Unit:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158:
| unit Unit2;
interface
Uses SysUtils;
type TDatei = class Name: String; Extension: String; Groesse: Real; private procedure setName(); procedure setExtension(); procedure setGroesse(); public procedure getName(); procedure getExtension(); procedure getGroesse(); end;
type TOrdner = class Name: String; Unterordner: Array of TOrdner; Dateien: Array of TDatei; private procedure setUnterordner(Name: string; var UO: TOrdner); procedure setDateien(); procedure setName(Name: string); public constructor Create(AName: String); procedure getUnterordner(var UO: TOrdner); procedure getDateien(); procedure getName(); end;
procedure Verzeichnis_einlesen(Verzeichnis: String; Struktur: TOrdner; var Ordner: TOrdner); procedure Vz_hilf(Verzeichnis: String; var Ordner: TOrdner);
var hilf: TObject;
implementation
procedure TDatei.setName(); begin
end;
procedure TDatei.setExtension(); begin
end;
procedure TDatei.setGroesse(); begin
end;
procedure TDatei.getName(); begin
end;
procedure TDatei.getExtension(); begin
end;
procedure TDatei.getGroesse(); begin
end;
procedure TOrdner.setUnterordner(Name: string; var UO: TOrdner); begin if self.Unterordner=nil then setlength(self.Unterordner,1) else setlength(self.Unterordner,length(self.Unterordner)+1);
Unterordner[length(self.Unterordner)-1]:=TOrdner.Create(Name); UO:=Unterordner[length(self.Unterordner)-1]; end;
procedure TOrdner.setDateien(); begin
end;
procedure TOrdner.setName(Name: string); begin self.Name:=Name; end;
constructor TOrdner.Create(AName: String); begin self.setName(AName); end;
procedure TOrdner.getUnterordner(var UO: TOrdner); begin UO:=self.Unterordner[length(self.Unterordner)-1]; end;
procedure TOrdner.getDateien(); begin
end;
procedure TOrdner.getName(); begin
end;
procedure Verzeichnis_einlesen(Verzeichnis: String; Struktur: TOrdner; var Ordner: TOrdner); var SR: TSearchRec; UO: TOrdner; begin if (Verzeichnis[length(Verzeichnis)]<>'\') then Verzeichnis:=Verzeichnis+'\'; Struktur:=TOrdner.create(Verzeichnis);
if FindFirst(Verzeichnis+'*.*',faanyfile,SR)=0 then begin repeat if ((SR.Attr and faDirectory)>0) and (SR.Name<>'.') and (SR.Name<>'..') then begin
Struktur.setUnterordner(Verzeichnis+SR.Name, UO);
Verzeichnis_einlesen(Verzeichnis+SR.Name, UO); end;
until FindNext(SR)<>0; FindClose(SR); end;
end;
end. |
Mein Problem ist im Moment also, wie ich dann korrekt den Unterordner zum einen mit seinem Vater verknüpfe und zum anderen diesen wieder korrekt rekursiv durchsuche. Und wie ich hinterher auf die Ganze Struktur korrekt zugreifen kann.
Die Dateien der Ordner auszulesen soll noch nicht das Problem sein.
Danke schon mal!