Wie kann ich eine Ordnerstruktur in einer Art Baum speichern?



  • Hi Leute!
    Ich will eine Ordnerstruktur in einem Objekt darstellen. Dafür habe ich eine Klasse geschrieben, die sich etwas an TreeView.Items orientiert.

    Die Klasse FolderCollection enthällt folgende Methoden:

    • void Add(FolderCollection collection)
      Mit dieser Methode kann man eine weitere FolderCollection hinzufügen. So kann man Unterordner hinzufügen.
    • int GetFolder(string sKey)
      Mit dieser Methode kann man die FolderCollection durchsuchen. Falls die Suche erfolgreich war, wird der Index des Elements zurückgegeben.

    -------------
    Man kann per FolderCollection

    Mein Ansatz sieht wie folgt aus:
    Ich lasse einen bestimmten Ordner nach Unterordnern durchsuchen und speichere alle Pfade in eine ArrayList. Die Unnötigen Ordnerangaben davor (z.B. C:\Eigene Dateien) entferne ich von jedem Pfadanfang.

    Folgende Aufgaben wiederhole ich für jeden Pfad:

    • Zerlegen des Pfades mit der Funktion string.Split() anhand des Zeichens \ (Backslash). Dadurch sind dann alle Ordner des Pfades der Reihe nach in einem Array gespeichert.
    • Es soll nacheinander geprüft werden, ob der Knotenpunkt schon existiert, wenn nicht soll er hinzugefügt werden.
      D.h. es wird als erstes im Hauptknotenpunkt nach ersten Element des Pfad-Arrays gesucht. Dann wird entweder der gefundene oder neu hinzugefügte Knotenpunkt durchsucht, ob dieser Knotenpunkt das zweite Element des Pfad-Arrays schon enthält. Wenn er noch nicht existiert, dann wird dieser Knotenpunkt hinzugefügt. Dann wird der vorherig hinzugefügte (oder schon existierende) Knotenpunkt durchsucht nach dem dritten Element usw.

    Mein Problem bei der Umsetzung:
    Der erste Knotenpunkt wird zum Hauptknoten hinzugefügt, jedoch verliehrt sich dann der Bezug zum Hauptknoten.

    Ich hoffe das ihr vielleicht eine andere Möglichkeit kennt, um die Ordnerstruktur in einer Baumstruktur abzubilden.



  • Was gefällt Dir denn an TreeView nicht?

    Willst Du eine Lösung basierend auf ArrayList machen oder was ganz freies?

    Was ganz freies wäre: Erstelle eine Klasse "Ordner". Diese enthält einen Verweis auf den übergeordneten Ordner. Gibts den nicht, befindet sich der Ordner im Stammverzeichnis.
    Außerdem hat "Ordner" die Info auf das Vorgänger- und Nachfolge-Ordner-Objekt im gleichen Ordnerlevel, sofern es sie gibt.
    Und zuletzt: Ordner hat die Info auf das erste Ordner-Objekt unterhalb seiner Ebene.

    Damit kannst Du mit Hilfe eines "Ordner" Objekts auf alle anderen Ordner zugreifen und bist dynamisch unterwegs.
    Wenn's zusätzlich um Zugriffs-Performance geht, legst Du eine Klasse an, die aus Ordnername und Ordnerobjekt besteht (plus ggf. weitere benötigte Merkmale). Diese Klassen werden in einer ArrayList angelegt und ist dann entsprechend sortierbar. Hast Du ein Objekt in der ArrayList gefunden, kennst Du dann auch gleich das "Ordner"-Objekt und kannst dort weiternavigieren...


Anmelden zum Antworten