Einzelnen Beitrag anzeigen
Alt 19.01.2010, 17:02   #4 (permalink)
Feanor
Gast
 

Beiträge: n/a

Standard AW: [C++]Komplexe Datenstrukturen Speichern/laden

Ist nichts kompliziertes. Eigentlich nur die Begrifflichkeit für das Persistieren von Objekten, sei es in Datenbanken, übers Netzwerk oder - wie in deinem Fall - in Dateien. Die Methodendefinition, solltest du eigentlich einfach so übernehmen können. Die Methoden musst du dann noch mit Leben füllen.
In "serialize" schreibst du deine Objekte (also die Membervariablen) in eine Datei (std::ostream, siehe ostream - C++ Reference) mittels "write"-Funktion von "std::ostream" (wie in meinem ersten Beitrag beschrieben).
In "deserialize" liest du dann die Variablen wieder aus dem Stream (in der gleichen Reihenfolge), also:
Code:
(new password())->deserialize(in);
Oder du gibst deiner password-Klasse eine statische deserialize-Funktion, die neue passwort-Objekte erstellt, quasi eine Factory.
Da neue Objekte auf dem Heap angelegt wurde, musst du diese auch wieder löschen, wenn du sie nicht mehr brauchst.
Wenn du Arrays oder Vektoren oder ähnliches auf diese Art persistieren willst, musst du dir natürlich was einfallen lassen, z.B. zuerst die Anzahl der Elemente in den Stream schreiben und danach die Elemente. Beim Auslesen kannst du dann die Anzahl rauslesen und in einer Schleife die Elemente wieder deserialisieren.

Du kannst auch statische "readValueFromStream(std::istream & in, T const & val)" und "writeValueToStream(std::ostream & out, T const & val)" Methoden in einer Helper-Klasse erstellen und diese templaten. Das spart dir einiges an Arbeit, solltest du an mehreren Stellen serialisieren.

Falls das soetwas wie eine Passwortverwaltung werden soll, dann sei gewarnt, denn die Werte werden nur binär in eine Datei geschrieben und sind nicht verschlüsselt. Darum müsstest du dich separat kümmern.

Probiers doch einfach mal aus und sobald du auf Probleme stößt, kannst du ja deinen Quelltext hier reinkopieren und ich/wir kann dir weiterhelfen.

Alternativ kannste das wie gesagt auch mit boost machen (Boost C++ Libraries) oder natürlich mit xml (Stichwort Xerces), wenn du drauf stehst und gern mit Kanonen auf Spatzen schießt.

edit: Lass dich von den "const"s nicht durcheinanderbringen. Kann auch gut sein, dass ich sie falsch gemacht habe. Im Zweifelsfall kannst du sie einfach weglassen.
  Mit Zitat antworten
Für diesen Beitrag bedankt sich:
Soman_X (20.01.2010)