Autor Beitrag
Peter18
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Mi 08.02.12 18:54 
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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 08.02.12 19:17 
Setze nach dem Schreiben Size des FileStreams auf Position des FileStreams, damit alle folgenden Daten abgeschnitten werden. ;-)
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 08.02.12 19:18 
Nutze doch einfach die SaveToFile-Methode der Stringlist, und spare dir den eigenen Stream.

_________________
We are, we were and will not be.
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 08.02.12 20:47 
Ganz genau. ;-)
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Do 09.02.12 14:57 
Hallo jaenicke,

nochmals danke, sieht gut aus. :D

Grüße von der sonnigen Nordsee

Peter