Home » Tutorials » Datenspeicherung » Binäre Dateien

Binäre Dateien

SpeichernAls

Damit wir in der Lage sind zu erkennen, dass eine Dateiversion zu neu ist, als dass wir sie vernünftig auswerten könnten, erweitern wir die Methode SpeichernAls.
Wir speichern noch zusätzlich ab welcher Programmversion die Datei gelesen werden kann.

function TFrmMain.SpeichernAls(FileName: string): boolean;
var
  SreamData: TRakBinaryStreamData;
begin
  ...
        SreamData.ApplicationVersion := Format('%d.%d.%d',
          [FULL_VERSION_NUMBER, PART_VERSION_NUMBER, BUGFIX_VERSION_NUMBER]);
        TRakBinaryShortString.AddToTag(SreamData, 'OpenVersion', '1.0');
  ...
end;

Die akuelle Programmversion speichern wir auch mit ab, den vielleicht will ein zukünftige Version einmal anzeigen, von welcher Version die Datei erstellt wurde.

SreamData.ApplicationVersion := Format('%d.%d.%d',
          [FULL_VERSION_NUMBER, PART_VERSION_NUMBER, BUGFIX_VERSION_NUMBER]);

FULL_VERSION_NUMBER, PART_VERSION_NUMBER, BUGFIX_VERSION_NUMBER sind Konstanten, die in dieser Version folgendermaßen belegt sind.

const
  FULL_VERSION_NUMBER = 1;
  PART_VERSION_NUMBER = 1;
  BUGFIX_VERSION_NUMBER = 0;

Das ergibt also den Versionsstring ‚1.1.0‘.
Es ist natürlich jedem frei überlassen, wie er die Versionsnummer für seine Programme aufbaut.
Das eigentlich Interessante ist aber, ab welcher Programmversion es noch sinnvoll ist die Datei auszulesen.

TRakBinaryShortString.AddToTag(SreamData, 'OpenVersion', '1.0');

Diese Information speichern wir einfach in einem normalen Attribut. Da die eigentlichen Kontakte in einem Unterknoten gespeichert sind, braucht man keine Angst zu haben, dass sich diese mit dem neuen Attribut in die Quere kommen.
Wir speichern hier nur die volle Versionsnummer und die Teilversionsnummer. Wir gehen einfach davon aus, dass mindestens die Teilversionsnummer hochgesetzt wird, wenn sich das Dateiformat ändert.
Die alte Version des Kontaktmanagers hat keine Probleme mit dem neuen Attribut. Sie ignoriert es einfach.