私はそのようなファイルを持っています:
file of record
Str: string[250];
RecType: Cardinal;
end;
しかし、このファイルをしばらく使用した後、私の顧客は、Strが100文字を超えることはなく、追加のフィールドが必要であることに気付きました。
新しいバージョンでは、次のようなファイルがあります。
file of packed record
Str: string[200];
Reserved: array[1..47] of Byte;
NewFiled: Cardinal;
RecType: Cardinal;
end;
このレコードのサイズは同じです。StrとRecTypeの間の前のレコードでは、8バイトにアラインされたときに未使用のバイトが1バイトでした。
質問:この新しいファイルが古いコードから読み取られると、どうなりましたか?彼は後方互換性が必要です。
古いコード読み取りサンプル:
var
FS: TFileStream;
Rec: record
Str: string[250];
RecType: Cardinal;
end;
...
// reading record by record from file:
FS.Read(Rec, SizeOf(Rec));