Entwickler-Ecke

Dateizugriff - [TFileStream] überschreibt alte Daten in der Datei


jojo-sp - Do 19.06.08 16:28
Titel: [TFileStream] überschreibt alte Daten in der Datei
Moinsen,

vielleicht sehe ich vor lauter Wald die Bäume nicht mehr :-)

Ich schreibe mit folgendem Code einen Record in die Datei:


Delphi-Quelltext
1:
2:
3:
4:
Stream := TFileStream.Create(fname, fmCreate);
if Assigned(Stream) then
    Stream.WriteBuffer(buf, SizeOf(TOneData));
Stream.Free;


Dieser Teil wird immer wieder aufgerufen. Da ich nicht weiß, wie viele Daten geschrieben werden, kann ich nicht direkt ein Array des Record Typs nutzen, da ich die Daten nicht erst sammeln und am Ende schreiben kann.
Soweit, so gut...

Das Problem ist jetzt aber, dass er mir immer nur den letzten buffer in die Datei schreibt; d.h. der vorherige Datensatz wird überschrieben und es steht immer nur der letzte in der Datei.

Vielleicht ist es auch einfach nur ein Gedankenfehler von mir in den 4 Zeilen :-)

MfG Johannes


Xentar - Do 19.06.08 16:42


Delphi-Quelltext
1:
Stream.Position := Stream.Size;                    

Damit springst du vor dem Schreiben von Daten ans Ende der Datei, und hängst die neuen Daten nur noch an.


jojo-sp - Do 19.06.08 16:45

Top

:dance2:

Danke, für die schnelle Antwort.


Horst_H - Do 19.06.08 18:29

Hallo,

Wie kann der Tipp helfen??
Du erstellst die Datei doch immer wieder neu.

Delphi-Quelltext
1:
 TFileStream.Create(fname, fmCreate);                    

wäre nicht ein Test mit fileExists(fName) und anschliessendem erstellen oder öffnen zum schreiben, und Platzierung ans Dateiende sinnvoller??
Alternativ den Stream nicht ständig öffnen und schliessen.

Gruß Horst