Beim Schreiben eines Stream bleiben reste der alten Daten
spacer
Autor Nachricht
Peter18
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 107


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 markieren
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 15833
Erhaltene Danke: 737

XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, 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. ;-)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator
Beiträge: 8117
Erhaltene Danke: 250

Win XP, Win 7
D7 PE, RAD Studio 2009 Professional
BeitragVerfasst: Mi 08.02.12 19:18 
Nutze doch einfach die SaveToFile-Methode der Stringlist, und spare dir den eigenen Stream.

_________________
Oel ngati kameie.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 107


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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 15833
Erhaltene Danke: 737

XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
BeitragVerfasst: Mi 08.02.12 20:47 
Ganz genau. ;-)
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 107


Delphi4
BeitragVerfasst: Do 09.02.12 14:57 
Hallo jaenicke,

nochmals danke, sieht gut aus. :D

Grüße von der sonnigen Nordsee

Peter
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home