Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Beim Schreiben eines Stream bleiben reste der alten Daten


Peter18 - Mi 08.02.12 18:54
Titel: Beim Schreiben eines Stream bleiben reste der alten Daten
Ein freundliches Hallo an alle,

schon wieder bin ich auf etwas seltsames gestoßen. :( Ich schreibe eine Stringliste per Stream in eine Datei. Wenn sich die Daten ändern wiederhole ich den Vorgang. An anderer Stelle werden die Daten gelesen. Solange die Datei größer wird ist alles in Ordnung, wenn sie aber kleiner wird bleiben Reste der alten Daten stehen. Zum Glück ist es Text und keine binären Daten, also leicht zu erkennen.

Auf diese Daten greifen verschiedene Programme zu, so dass es wichtig ist diese Datei mit dem Schreiben zu sperren. Was mit löschen und schreiben nicht sicher wäre. Leider habe ich nur die API-Quellen von Delphi 4, nicht aber die der Objekte. Vielleicht hat jemand einen Tipp, was ich tun kann.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure WriteLst( SG : TStringGrid; FPath : String );
var
  SL : TStringList;                
  I  : Integer;
  fs : TFileStream;

begin
  SL := TStringList.Create;
  SL.Add( '[Daten]' );
  for I  := 0 to SG.RowCount - 1 do
    SL.Add( SG.Rows[ I ].CommaText );
  fs := TFileStream.Create( FPath, fmOpenWrite );
  SL.SaveToStream(fs);
  fs.Free;
  SL.Free;
end;


Dank Euch im Voraus

Peter


jaenicke - Mi 08.02.12 19:17

Setze nach dem Schreiben Size des FileStreams auf Position des FileStreams, damit alle folgenden Daten abgeschnitten werden. ;-)


Gausi - Mi 08.02.12 19:18

Nutze doch einfach die SaveToFile-Methode der Stringlist, und spare dir den eigenen Stream.


Peter18 - Mi 08.02.12 20:10

Hallo Gausi,

Danke für Deine Antwort! Leider hat sie den Nachteil, dass ich nicht steuern kann, ob andere Programme zugreifen können oder nicht.

Hallo jaenicke,

Dank auch Dir. Du meinst
fs.Size := fs.Position;?

Grüße von der Nordsee

Peter


jaenicke - Mi 08.02.12 20:47

Ganz genau. ;-)


Peter18 - Do 09.02.12 14:57

Hallo jaenicke,

nochmals danke, sieht gut aus. :D

Grüße von der sonnigen Nordsee

Peter