Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#2

Re: Verzeichniss abbilden...

  Alt 27. Aug 2009, 16:44
Es kommt ja erstmal darauf an, was du willst.
Denn es gibt ja mehrere Wege

Wenn du eh nur eine normale TreeView hast und alle Daten immer darin enthalten sind (also nicht in OnExpand und OnCollapse füllen und leeren), dann kannst du diese Daten (ist ja nur der Name) direkt in die ListView einfügen und deinen Record weglassen ... doppelte Datenführung muß dann doch nicht sein.


Effektiv würde ich garkeine Arrays verwenden, sondern verkettete Listen.


in meinem SSF hab ich im Grunde diese Struktur zur Speicerhung verwendet
Delphi-Quellcode:
TRootDirRec = Record
  First, Last: PDirRec;
End;
PDirRec = ^TDirRec;
TDirRec = Record
  Prev, Next: PDirRec;
  Parent: PDirRec;
  Childs: TRootDirRec;

  FileName: String;
  Attributes: LongWord;
End;

Var Root: TRootDirRec;
und dann sind von Root ausgehend alle Dateien/Verzeichnisse als doppelt verkettete Liste bei ihrem Parent eingetragen.

Also die Dateien/Ordner einer Ebene sind über Prev & Next miteinander verbunden
und in First & Last stehen Anfang und Ende der Liste (wobei man Prev & Last auch weglassen könnte, wenn man nicht vor hat, diese Liste nachträglich zu ändern, (abgesehn von Einträgen anzuhängen).

Insgesammt stellt dieses also eine mehrfach kreuz und quer verkette Liste dar, durch welche man via eines Pointers (PDirRec) sehr leicht navigieren kann.

Ob es nun eine Datei oder ein Verzeichnis ist, ist dabei erstmal egal,
denn durch den gleichen Datentyp kann man so auf alles gleich zugreifen.
Und was nun was ist, wird in Attributes festgelegt (dort gibt es eines für Verzeichnisse)

Hat den Vorteil, daß sich diese Struktur sehr schön Editieren läßt (hinzufügen, ändern und löschen von Einträgen),
denn wie man sieht, fülle ich diese Liste ja nicht einfach nur, sondern kann auch wärend des Füllens damit arbeiten und z.B. schon zu diesem Zeitpunkt diese Liste anzeigen und auch schon einige Sachen damit veranstalten.



PS: TFileName ist etwas mickrig definiert, hab hier Datei-/Verzeichnisnamen, welche wesendlich länger sind.

FileName = Array[0..MAX_PATH-1] wäre da schon angebrachter
Wobei wohl meistens String[255] auch ausreichen sollte, da MAX_PATH auch nur 260 ist, aber laut Spezifikation kann halt ein Name im FAT/NTFS-Dateisystem so lang sein, also MAX_PATH-1, da dort ja die abschließende #0 mit eingerechnet ist.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat