Hallo,
ersteinmal würde ich dir empfehlen alle Records mit dem Schlüsselwort
Packed versehen. Damit stellst du sicher das die Daten immer den ninimal Platz belegen, egal wie die äußeren umstände sind (Delphi version usw.).
Also Beispielsweise so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| type TPosition = packed record Datei: Integer; Start: Integer; Definition: Boolean; end; |
Dann musst du dir ein Dateiformat ausdenken um mehrere verschiedene Records in die selbe Datei zu bringen.
Z.b. könntest du dir eine Blockheader konstruieren, der Informationen enthällt von welchem Datrentyp der kommende Block ist. Inetwa so:
Delphi-Quelltext
1: 2: 3: 4: 5:
| tBlockHeader = packed recod BlockType : LongInt; BlockSize : Longint; Deleted : Boolean; END; |
Diene Datei baust du dann als
untypisierte Datei so auf, das immer ein Blockheader kommt und danach der Datenblock. Der Trick bei der sache ist, das du in BlockType eine nummer speichers, die angibt ob als nächstes ein TPosition, TAttribute, TDaten Datensatz kommt. In BlockSize steht wie groß dieser Block ist, das diehnt aber eher dazu schneller durch eine solche Datei scrolen zu können und kann vieleicht noch zur Versionskontrolle genutzt werden. Über Deleted kannst du dann ncoh einträge als gelöscht markieren, damit du nicht immer die ganze Datei neu schreiben musst, wenn du einen Datensatz löscht.
Wie gasagt das ist nur eine Lösung. Wenn du zwei Dateien verwendest (Daten und Indexdatei) könntest du das Arbeiten damit warscheinlich noch performanter gestalten.
Begriffe die du zu dem Thema in der Delphi-Hilfe nachschlagen solltest: FILE, AssifnFile, Blokread, Blockwrite, CloseFile, Reset, Rewrite, Dateitypen, tStream, Seek.
Gruß
Klabautermann