Kleines Beispiel (hab's nicht ausprobiert):
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| type TIrgendwas = record { ... } end; TNochwas = record { ... } end;
var Irgendwas: TIrgendwas; Nochwas: TNochwas;
procedure Speichern(Dateiname: String); var F: File; begin AssignFile(F, Dateiname); Rewrite(F, 1); // 1 = Byteweise schreiben BlockWrite(F, Irgendwas, SizeOf(Irgendwas)); BlockWrite(F, Nochwas, SizeOf(Nochwas)); CloseFile(F); end;
procedure Laden(Dateiname: String); var F: File; begin AssignFile(F, Dateiname); Reset(F, 1); // 1 = Byteweise lesen BlockRead(F, Irgendwas, SizeOf(Irgendwas)); BlockRead(F, Nochwas, SizeOf(Nochwas)); CloseFile(F); end; |
Wenn du bei Rewrite und Reset nicht noch zusätlich ", 1" angibst, werden immer mindestens 128 Byte geschrieben, was zu Fehlern führen kann und Speicherverschwenung ist.
BlockRead/BlockWrite haben noch einen 4. Parameter (Integer). In diesen wird geschrieben, wieviele Bytes tatsächlich geschrieben bzw. gelesen wurden. Wenn BlockWrite weniger als SizeOf(Typ) zurückgibt, ist der Datenträger voll, wenn BlockRead weniger als SizeOf(Type) zurückgibt, ist die Datei zu klein (ungültig).
Noch was: probier nicht, dynamische Speicher (z.B. String) damit zu speichern. Dabei wird nur die Adresse gespiechert, spätestens nach dem reboot ist alles weg.
Viel Spaß beim coden!