Hallo
persönlich wäre ich immer dafür, die Daten einzeln zu schreiben. Mit Filestream und TReader und Writer geht das ganz gut und einfach. Da hast du für jeden Datentypen schon ne Methode und brauchst dich um viele Dinge nicht zu kümmern. Ich finde das auch sehr verständlich und einfach lesbar.
Delphi-Quellcode:
var FS:TFileStream;
Writer:TWriter;
begin
fs:=TFileStream.Create(PfadDateiName,fmCreate);
try
Writer:=TWriter.Create(fs,const_BufferGroesse);
try
//Version schreiben
Writer.WriteInteger(const_Version_aktuell);
//Datenschreiben
Writer.WriteString(s);
Writer.WriteInteger(i);
Writer.WriteDate(Datum);
finally
writer.Free;
end;
finally
fs.free;
end;
end;
laden:
Delphi-Quellcode:
var FS:TFileStream;
Reader:TReader;
Version:integer;
begin
if FileExists(PfadDateiName) then
begin
fs:=TFileStream.Create(PfadDateiName,fmOpenRead);
try
Reader:=TReader.Create(fs,const_BufferGroesse);
try
Version:=Reader.ReadInteger;
if Version=... then
...
finally
Reader.Free;
end;
finally
fs.free;
end;
end;
end;
Wenn du eine Liste speicherst, dann halt zuerst die Anzahl und dann per Schleife die Daten.
Ich schreib als erstes immer eine Version mit rein. Beim auslesen kannst du die dann auswerten und so auch das laden "älterer DateiVersionen" unterstützen oder laden "neuerer Versionen" blocken. Wenn du mal doch dein record änderst haste auch weniger Probleme.
und ich würde es nicht als record machen, gleich als Klasse mit Savetostream oder savetofilemethoden.
Gruß Frank