Crowbar hat folgendes geschrieben: |
ich habe ein Array und Lade/Speicher dieses über TFileStream in eine bzw. aus einer Datei. Alles Ok!
So, nun habe ich aber mein Array erweitert.
Um es aber kompatible mit den "alten" abgespeicherten Dateien zu halten und um keinen Fehler bzw. "Überladungen" beim Laden der Array-Felder in das "erweiterte" Array zu erhalten, muss ich irgendwie Abfragen, wieviele Felder es im Array gibt. Also, in meinem Beispiel, ob es 2 oder 3 Felder gibt.
Nur wie?
"Alter" Record:
Quelltext 1: 2: 3: 4:
| TTestRecord = Record Name, Einheit : String; end; |
"Neuer" (erweiterter) Record:
Quelltext 1: 2: 3: 4: 5:
| TTestRecord = Record Name, Nummer, Einheit : String; end; | |
Die Groesse eines Records (in Bytes) bekommst Du mit SizeOf. Allerdings hilft Dir das nicht viel, wenn Du feststellen willst, ob eine Datei die alten oder die neuen Records enthaelt, denn es gibt ja immer das KGV (Hey, wer haette gedacht, dass man Grundschulkenntnisse bei der Programmierung gebrauchen kann? ;-) ) aus den beiden.
Normalerweise macht man das dann so, dass man der neuen Datei einen Header verpasst, in dem eine Versionsnummer drinsteht und evtl. die Groesse der darin gespeicherten Records. Dann kann man spaeter immer feststellen, welchen Recordtyp man darin abgespeichert hat. Um ganz sicher zu gehen, kann man dem Header noch eine "Magische Zahl" voranstellen, von der man sicher ist, dass sie in der Datei ohne Header (also der alten) nicht am Anfang stehen kann.
Hilft das?
twm