*cerox*
Lt. Commander
- Registriert
- Feb. 2005
- Beiträge
- 1.357
Hallo zusammen,
ich muss hier ein objektorientiertes Programm schreiben, welches Datensätze in Text- oder Binärdateien speichert (keine Datenbank).
Ich habe mich nun für Binärdateien entschieden, da ich die Daten dort Objekt für Objekt reinschreiben und auslesen kann mit fread und fwrite.
Das funktioniert auch alles soweit wunderbar. Nun möchte ich im Programm die Möglichkeit haben, Datensätze (in dem Fall die Daten eines Objekts) zu ändern. Dazu habe ich das Objekt ausgelesen und geändert. Nun möchte ich das Objekt wieder an die "alte Stelle" schreiben, und so nur die alten nicht mehr benötigten Daten überschreiben.
Ich habe nun versucht, das ganze mit fsetpos und fgetpos zu lösen. Nach dem Auslesen des richtigen Objekts habe ich also geschrieben:
- pos ist eine Variable vom Typ fpos_t (das stand so im meinem C-Buch)
- file ist ein Zeiger einer FILE-Struktur
Das richtige Objekt bekomme ich so 100%ig (hab ich mehrmals geprüft) und der Dateipositionszeiger sollte nun am Ende des Objekts stehen, welches ich überschreiben möchte.
Daher wollte ich danach danach den Dateipositionszeiger um ein Objekt zurück setzen mit:
Den sizeof Operator hab ich auch bei fread und fwrite immer benutzt; die Frage ist nur ob das jetzt so funktioniert, indem ich die Größe einer Klasse von einem Zeiger subtrahiere, denn vorher habe ich nur mit sizeof die Größe angegeben und nicht damit gerechnet; ich denke mal hier liegt der Fehler, denn wenn ich jetzt das Objekt in die Datei schreibe, hängt er es immer wieder hinten an der Datei an, als hätte er den Dateipositionszeiger nie geändert.
Vor dem Schreiben habe ich ihn natürlich gesetzt mit:
Kann mir bitte jemand helfen? Ich weiß da nicht mehr weiter...
ich muss hier ein objektorientiertes Programm schreiben, welches Datensätze in Text- oder Binärdateien speichert (keine Datenbank).
Ich habe mich nun für Binärdateien entschieden, da ich die Daten dort Objekt für Objekt reinschreiben und auslesen kann mit fread und fwrite.
Das funktioniert auch alles soweit wunderbar. Nun möchte ich im Programm die Möglichkeit haben, Datensätze (in dem Fall die Daten eines Objekts) zu ändern. Dazu habe ich das Objekt ausgelesen und geändert. Nun möchte ich das Objekt wieder an die "alte Stelle" schreiben, und so nur die alten nicht mehr benötigten Daten überschreiben.
Ich habe nun versucht, das ganze mit fsetpos und fgetpos zu lösen. Nach dem Auslesen des richtigen Objekts habe ich also geschrieben:
Code:
fgetpos (file,&pos);
- pos ist eine Variable vom Typ fpos_t (das stand so im meinem C-Buch)
- file ist ein Zeiger einer FILE-Struktur
Das richtige Objekt bekomme ich so 100%ig (hab ich mehrmals geprüft) und der Dateipositionszeiger sollte nun am Ende des Objekts stehen, welches ich überschreiben möchte.
Daher wollte ich danach danach den Dateipositionszeiger um ein Objekt zurück setzen mit:
Code:
pos-=sizeof(class kunden);
Den sizeof Operator hab ich auch bei fread und fwrite immer benutzt; die Frage ist nur ob das jetzt so funktioniert, indem ich die Größe einer Klasse von einem Zeiger subtrahiere, denn vorher habe ich nur mit sizeof die Größe angegeben und nicht damit gerechnet; ich denke mal hier liegt der Fehler, denn wenn ich jetzt das Objekt in die Datei schreibe, hängt er es immer wieder hinten an der Datei an, als hätte er den Dateipositionszeiger nie geändert.
Vor dem Schreiben habe ich ihn natürlich gesetzt mit:
Code:
fsetpos(file,&pos);
Kann mir bitte jemand helfen? Ich weiß da nicht mehr weiter...
Zuletzt bearbeitet: