verzeigerte Listen abspeichern

zonki

Mitglied
Hallo,

wie kann man verzeigerte Listen gefüllt mit Objekten verschiedener Klassen mittels "speichern unter" oder "speichern" abspeichern und mit "öffnen" wieder verfügbar machen?
Gibt es eine Möglichkeit die Liste als Ganzes zu speichern oder muss sie jedes Mal wieder neu zusammengebaut werden? Die einzelnen Objekte in der Liste besitzen auch gegenseitig Zeiger aufeinander. Ich habe keinen Plan wie man diesen Zustand abspeichern kann. Kann mir jemand helfen?
 
Kannst Du diese 'verzeigerte Liste' etwas genauer beschreiben? Ist es eine Liste, deren Elemente Zeiger auf Objekte sind? Und was meinst Du mit 'besitzen gegenseitig Zeiger aufeinander'? Ich vermute mal, Du willst die Daten der Objekte in der Reihenfolge der Liste in eine Datei speichern, stimmt das?
 
Hallo,

ein kleines Bsp. was der Liste gut entspricht: in der Liste ist ein Objekt A der Klasse A und ein Objekt B der Klasse B abgespeichert. Beide Objekte haben verschiedene Attribute und Methoden zusätzlich besitzt Objekt A einen Zeiger auf Objekt B und umgekehrt. Somit können sich die Objekte gegenseitig ansprechen. Desweiteren ist in der Liste ein Zeiger auf das nächste Listenelement (next) und ein Zeiger auf das rückwärtsliegende Listenelement (back) abgespeichert.
 
Wenn in den abzuspeicherten Objektdaten Zeiger auf andere Objekte enthalten sind, die mit abgespeichert werden sollen, ist das latürnich etwas umständlicher. Man kann schließlich nicht erwarten, daß die Objekte nach dem Laden der datei an der gleichen Stelle im Adressraum liegen wie vorher beim Speichern (logisch, oder?). Daher mußt du einen Weg finden, wie Du die Objekte in der Datei eindeutig identifizieren kannst.
Dazu kann man selber eine eindeutige ID für jedes Objekt vergeben, auf das in der Datei Bezug genommen wird (anstatt des Zeigers). Also beim Speichern des Objektes schreibst Du die ID des Objektes, auf das der Zeiger zeigt, in die Datei, anstatt des Zeigers selber. Beim Einlesen mußt Du die Zuordnung natürlich umgekehrt wieder herstellen. Das wäre nach meiner Meinung die sauberere Lösung.
Du könntest natürlich auch anstatt des Zeigers die Position des Objektes in der Datei abspeichern. Das könnte allerdings etwas umständlich werden, da Du ja beim Speichern eines Objektes noch nicht die Dateipositionen späterer Objekte kennst. Man kann auch damit klarkommen, indem man die Dateipositionen der Objekte später nachträgt, wenn alle Objekte in der Datei sind, ich persönlich halte diese Methode allerdings für nicht so sauber.
Das Speichern in Dateien un Lesen von Dateien mußt Du in diesem Fall wohl selber Implementieren. Wie das geht hängt im Einzelnen davon ab, ob du mit Document/View und CArchive arbeitest oder nicht.
 
Zurück