Mal langsam hier, Leute. Erstens richtet
packed in der Standardeinstellung an 4 Byte- und nicht an 8 Byte-Grenzen aus und zweitens hat das hier mit dem Problem nichts zu tun.
Das Problem ist vielmehr, dass dynamische Array- und lange String-Variablen (auch Recordfelder) Zeiger auf den dafür allokierten Heap-Speicher sind, das Array bzw. der String ist also nicht direkt im Record enthalten. Um den Record dann sebst in der Datei zu speichern, muss man die Zeiger dann selbst dereferenzieren. Eine Möglichkeit wäre z.B, das so zu machen:
Delphi-Quellcode:
type
TMyRec = record
Data1: Integer;
Count: Integer;
Vals: Array of Integer;
end;
var
fs: TFileStream;
rec: TMyRec;
begin
fs := TFileStream.Create({wie gehabt});
rec.Count := Length(rec.Vals);
fs.WriteBlock(rec, Sizeof(Rec) - Sizeof(Pointer));
fs.WriteBlock(rec.Vals^, Length(Vals) * Sizeof(Integer));
fs.Free;
end;