AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verzeichniss abbilden...

Ein Thema von Teekeks · begonnen am 27. Aug 2009 · letzter Beitrag vom 30. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#1

Verzeichniss abbilden...

  Alt 27. Aug 2009, 16:32
Hallo!
Ich Würde gerne in einem TreeView Ein Verzeichnis + alle Unterverzeichnisse + alle Files darin abbilden.
Dazu habe ich mir zuerst mal folgendes zusammengebastelt:
Delphi-Quellcode:
type
  TFileName=string[50];

  PTVDir=^TTVDir;

  TTVDir=record
    Dir:string[255];
    Files:array of TFileName;
    Dirs: array of PTVLDir;
  end;
Nun ist das Ding so ja nicht so einfach zu verwalten... Da habe ich mich gefragt: könnt ihr mir entweder erklären wie ich auf die einzelnen Elemente zugreife (ich habe fast keine Erfahrung mit Pointern...) oder mir eine einfachere Lösung bieten?

Das wäre auf jeden Fall nett.

Gruß Teekeks
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 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
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Verzeichniss abbilden...

  Alt 27. Aug 2009, 16:51
Ich hatte mich nur entschlossen das ganze nochmal neben dem TreeView zu speichern weil ja immer gesagt wird das man nicht mit den Komponenten seine Daten Speichern soll (wegen Zugriffs Geschwindigkeit...).
Aber ich könnte mich ja auch einfach darüber hinwegsetzen... ^^

Gruß Teekeks

[roter Kasten] du hast Dateien die (ohne Verzeichnispfad)länger als 50 Zeichen sind?
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Verzeichniss abbilden...

  Alt 27. Aug 2009, 17:06
Zitat von Teekeks:
Ich hatte mich nur entschlossen das ganze nochmal neben dem TreeView zu speichern weil ja immer gesagt wird das man nicht mit den Komponenten seine Daten Speichern soll (wegen Zugriffs Geschwindigkeit...).
Aber ich könnte mich ja auch einfach darüber hinwegsetzen... ^^
sagen wir es mal so, wenn du den ganzen Pfad eh im Tree hast,
dann wird es durch die Doppelte Haushaltsführung eher langsamer und du hast alle Daten doppelt im RAM

Ich hab meine Liste nur als Binärbaum rumliegen
und a) im VirtualTreeView nur die angezeigten Daten drin (zusammengeklappte Verzeichnisse werden aus dem TreeView gelöscht)
und b) im Tree sind nur Pointer auf dem Baum enthalten, also auch keine doppelten Daten (angezeigte Strings werden aus dem Baum geladen)

In der alten Version (SSF2) hatte ich aber auch alles im TreeView drin, falls dieses dich etwas beruhigt

Zitat von Teekeks:
[roter Kasten] du hast Dateien die (ohne Verzeichnispfad)länger als 50 Zeichen sind?
joar?
wir leben doch nicht mehr in Zeiten von 8.3
Miniaturansicht angehängter Grafiken
unbenannt_188.jpeg  
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Verzeichniss abbilden...

  Alt 27. Aug 2009, 17:35
OMG es stimmt ^^
Gut, Ich lebe momentan in der zeit wo ein Dateiname maximal 25 Zeichen haben darf (aus ethischen gründen ^^). Insofern war ich schon großzügig...
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Verzeichniss abbilden...

  Alt 27. Aug 2009, 17:51
nja, wo ich mein Programm auch auf andere/fremde Rechner loslasse, hab ich mich an die offiziellen Grenzen gehalten.

PS: die Zeiten wo ein kopletter Pfad nur 259 Zeichen enthalten darf
(256 Zeichen Pfad + 3 Zeichen Laufwerk ala "C:\")
sind auch schon lange vorbei ... offiziell sind es bei MS inzwischen schlappe 32768
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Verzeichniss abbilden...

  Alt 29. Aug 2009, 11:35
Hallo,

wer benutzt denn heute noch Records ?
Ich würde eine TList nehmen.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Verzeichniss abbilden...

  Alt 29. Aug 2009, 12:38
@Hoika

Records für alle die in tlist auch Inhalte haben ;-)

Gruß
K-H
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Verzeichniss abbilden...

  Alt 29. Aug 2009, 12:52
Hallo,

das habe ich nicht verstanden ...


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Verzeichniss abbilden...

  Alt 29. Aug 2009, 21:38
wie legst du denn mehrere Werte pro Eintrag in TList ab?
(in einem Record)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz