Die "richtige" Methode ist wenn man die Datei zum Schreiben öffnet, mit Seek ans Ende geht und dort weiterschreibt.
Was man vermeiden sollte ist den alten Inhalt in eine Stringliste einzulesen, dann Daten anhängen und den gesamten Inhalt wegzuschreiben.
Mit dieser falsche Methode würde man alle Daten, die man bisher geschrieben hat nochmals schreiben (nicht gut für die CF).
Ich habe mal auf die Schnelle eine Hilfsklasse geschrieben, mit der man es besser machen kann.
Delphi-Quellcode:
type
// Mit dieser Klasse kann man Daten an eine bestehende Datei anhängen
TAppendFileWriter = class(TObject)
private
FStream : TFileStream;
FFilename : string;
function GetFilesize: Int64;
public
constructor Create(const filename:string);
destructor Destroy;override;
procedure WriteString(const s : String);
procedure WriteLine(const line:string);
function Flush:Boolean;
property Filename:string read FFilename;
property Filesize:Int64 read GetFilesize;
end;
{ TAppendFileWriter }
constructor TAppendFileWriter.Create(const filename: string);
begin
inherited Create;
FStream := TFileStream.Create(filename, fmOpenReadWrite or fmShareDenyWrite);
FStream.Seek(0, soFromEnd);
end;
destructor TAppendFileWriter.Destroy;
begin
FStream.Free;
inherited;
end;
procedure TAppendFileWriter.WriteString(const s: String);
begin
if s <> '' then
FStream.WriteBuffer(s[1], Length(s));
end;
procedure TAppendFileWriter.WriteLine(const line: string);
begin
WriteString(line+#13#10);
end;
function TAppendFileWriter.GetFilesize: Int64;
begin
Result := FStream.Size;
end;
// Daten sicher schreiben
procedure TAppendFileWriter.Flush;
begin
if not FlushFileBuffers(FStream.Handle) then
RaiseLastWin32Error;
end;