Hallo,
würde ich genauso machen. Den classhelper würdest Du noch nicht mal unbedingt benötigen, Delphi hat das schon fast alles onboard (Twriter/Treader).
Persönlich würde ich auch die unterrecords nach der gleichen Methode, allerdings jedes Element dann einzeln in den stream schreiben.
bsp:
Delphi-Quellcode:
Var Writer:Twriter;
begin
writer:= Twriter.create(Stream,4096);
try
begin
//version schreiben
Writer.writeinteger(aktuelleVersionsNummer);
Writer.WriteString(blub1);
Writer.WriteString(blub2);
Writer.WriteInteger(blubbi);
...
Writer.WriteInteger(Länge des dyn. arrays);
for i:=0 to ... usw
Writer.writestring(meinrecord.xyz
...
end;
finally
writer.free;
end;
Ich finde das recht angenehm, wenn man das dann als Klasse macht und jede Klasse eine savetostream und loadfromstream- Methode hat.
Die Versionsnummer lege in einer
unit fortlaufen ab. Bei savetostream wird immer die aktuelle Version geschrieben und dann kann man die bei loadfromstream auch auswerten
Delphi-Quellcode:
with reader do
begin
//Version lesen
Datenversion := readinteger;
blub:=Readstring;
if Datenversion>=Version155 then
begin
blub2:=readstring;
end;
blubbi:=readinteger;
end;
blub2 ist halt irgendwann mal dazugekommen. Auf diese Weise kann man schnell eine Abwärtskompatibiliät erreichen, egal mit welcher alten Version des Programms die Daten gespeichert wurden, die neue bekommt sie immer wieder+korrekt auf. Und ohne, daß Du dir beim Programmieren da große Kopfzerbrechen bereitest.
Wenn das dyn. Array komplett geschrieben wird, würde ja hier bei Änderungen ein recht hoher Aufwand entstehen, alte gespeicherte Daten noch zu lesen und umzuwandeln. Lieber da gleich etwas mehr Code schreiben (der trotzdem sehr übersichtlich und verständlich ist), als dann bei Änderungen eine code zu haben, wo keiner mehr durchsieht.
Andere Frage: würde man sich nicht hier auch evtl Zukunftsprobleme einhandeln, wenn die Daten komplett geschrieben werden und man auf die Datentypen nicht aufpaßt (z.B. string verwendet)?
Die Treader und Twriter sollten da ja entsprechend aufgebaut sein, daß hier nix in die Hose geht.
Ich hatte das hier ja schon mal gefragt und hoffe das paßt auch so. Probieren kann ich es noch nicht, da mein PC eine effektive Methode gefunden hat, das ich mein Delphi XE2 nicht installieren kann
Gruß Frank