Seite 1 von 1

In datei Spiechern

Verfasst: Di Mai 12, 2009 6:12 pm
von Empire
Kenn jemand ein Gutes Tutoriel zum Thema zB. Listen In dateien speichern?

mfg
Empire

Re: In datei Spiechern

Verfasst: Di Mai 12, 2009 6:35 pm
von Kerli
Ein Tutorial das das direkt behandelt kenne ich keines, aber das sollte eigentlich auch mit unserem Tutorial nicht so schwer sein...

Zuerst öffnest du mit fopen() eine Datei zum Schreiben. Dann gehst du in einer Schleife alle Elemente der Liste durch und schreibst sie mit fwrite() in die Datei. Dann brauchst du nur mehr mit fclose() die Datei wieder schließen und du bist fertig.

Zum Laden machst du das eigentlich fast genau gleich. Du öffnest wieder die Datei und dann ließt du der Reihe nach mit fread() die einzelnen Strukturen der Liste heraus. Dabei musst du nur beachten das die Zeiger auf die benachbarten Elemente in der Liste mit sehr hoher Wahrscheinlichkeit nicht mehr gültig sind weshalb du diese noch aktualisieren musst.

Re: In datei Spiechern

Verfasst: Mi Mai 13, 2009 7:55 am
von Jside
Du kannst z.b. folgendes:

char *test[2] = { "Hallo","Hello"};

folgendermaßen in eine Datei schrieben(aber erst mit fopen öffnen...)

Code: Alles auswählen

fprintf(datei,"%s\n%s",test[0], test[1]);
dann sieht der Inhalt der Datei folgendermaßen aus:
Hallo
Hello
Das kannst du jetzt z.b. via fgets welches immer eine Zeile einließt z.b. so wieder einlesen:

Code: Alles auswählen

fgets(test[0],255,datei);
fgets(test[1],255,datei);
Dann ist es wieder wie oben. 255 ist die Begrenzung, der einzulesenden Zeichen(pro Zeile), kannst du natürlich auch höher machen, sobald fgets an einen Zeilenumbruch(\n)(-oder ans EOF) kommt,(was indemfall nach 5 Zeichen passiert) stoppt es, daher du kannst die Zahl der Einzulesenden Zeichen auch sehr hoch stellen....

...so mach ich das zumindest immer ;)

Re: In datei Spiechern

Verfasst: Do Mai 14, 2009 8:27 am
von Xin
Empire hat geschrieben:Kenn jemand ein Gutes Tutoriel zum Thema zB. Listen In dateien speichern?
Du brauchst eine Funktion, die eine Node der Liste "serialisiert".
Das bedeutet, dass alle relevanten Informationen hintereinenander gesetzt werden. Dieser Funktion übergibst Du einen Stream, den Du von fopen() bekommst (In C++ entsprechend mit iostreams).

Als nächstes brauchst Du eine Funktion, die einen serialisierte Node wieder in eine Echte verwandelt. Auch diese bekommt einen Stream und liest aus dem Stream die erforderlichen Daten aus, erstellt daraus die Node und gibt sie zurück.

Deine Liste muss anschließend nur den Stream öffnen und ihn der Reihe nach den Nodes durchreichen, bzw. beim Lesen solange Nodes erzeugen, bis der Stream nichts mehr zum Lesen anbietet.