laden speichern fread / fwrite
-
hi, ich versuche mich schön länger am laden/speichern, aber komme nicht bis zum ende.
ich habe eine Klasse Rennen und speicher einzelne Objekte in einer liste ab.
speichern sieht so aus:FILE *stream; if ((stream = fopen("Test.txt", "w")) == NULL) {} for (int i=0;i<=list->Count-1;i++) { fwrite((*list)[i],sizeof(Rennen),1,stream); } fclose(stream);jetzt will ich die liste wieder aus der datei laden. hatte da auch schon teilerfolge, aber war alles gefuddel.
ich habe jetzt versucht die liste - analog zu speichern - zu laden, habe es mit eof /foep und fseek indem ich die länge der Liste ganz an den anfangder datei geschrieben habe. aber das hat alles nicht funktioniert. evtl kann mir ja jemand sagen wie es richtig heissen müsste. thx
-
ich habe jetzt versucht die liste - analog zu speichern - zu laden
Das würde mich interssieren, was analog speichern ist.
Davon abgesehen gitbt es Methoden der Klasse TStringList zum laden und speichern. Du brauchst also keine eigene zu schreiben
-
Was ist denn "list"? UNd was ist "Rennen"?
-
wie oben beschrieben ist "list" meine liste in der Objekte vom Typ Rennen (meine eigen erstellte Klasse) gespeichert werden.
Da ich gerne die kompletten Objekte bzw die Liste speichern möchte, bringt mir die Speichermethide für Strings nichts.
evtl ist es jetzt etwas deutlicher

-
Wie hast du denn die Daten im Speicher untergebracht? (Array? STL-Container (welcher?)? verkettete Liste? ganz anders?) Und enthält die Klasse "Rennen" irgendwelche Pointer-Elemente?
PS: Mein Vorschlag: implementier einen Operator >> und <<, mit denen ein "Rennen"-Objekt aus streams gelesen bzw. geschrieben werden kann und steig dann um von FILE* auf fstream.
-
@ CStoll (off) hast du da evtl genauere quellen?
also also beispiel:
Rennen * einRennen=new Rennen();
neuesRennen->setDate(StrToDate(MaskEdit1->Text));
.
.
.
list->Add(neuesRennen);so ist grob die Struktur.... jetzt will ich die Sache einfach speichern (bzw speichern habe ich ja schon, mir fehlt nur laden).
Kann doch nicht sein, dass es so schwer ist?!?!?
-
neuling2006 schrieb:
@ CStoll (off) hast du da evtl genauere quellen?
Ja, jedes bessere C++-Buch dürfte etwas zur Operator-Überladung und Stream-IO zu sagen haben.
Ansonsten hilft sicher auch die MSDN weiter.PS: Und dein Code-Schnipselchen geht so ziemlich an der Frage vorbei. Ich wollte nicht wissen, wie du Rennen und list verwendet, sondern was sie intern darstellen. Deshalb nochmal exakt:
Was für ein Datentyp ist 'list'?
Was für ein Datentyp ist 'Rennen'?
(wenn's keine Typen der Standard- oder Borland-Bibliothek sind, bitte mit Deklaration der Klasse angeben. danke)
-
TList *list=new TList();
class Rennen
{
.
..
.
.
};
-
Du kannst nicht einfach speicher dumpen... Das geht 100%ig schief... Du musst Funktionen implementieren, die das Serialisieren der Klasse ermöglichen (Die intern notwendigen Daten in Form bringen und anschliessend in ein File schreiben. Das selbe dann auch Rückwärts für das Entserialisieren.)
-
krass, das das in c++ so schwer zu seien scheint. Mit java hätte ich das in 2 mins erledigt. Gibts es fuer c++ keine Seiten wo speichern über serialisierung behandelt wird?