Hier mal eine Basis zum erweitern (ohne Try...finally und with * do) zum besseren Verständnis:
Delphi-Quellcode:
// Record mit Inhalt füllen
[...]
DateiRec.InhaltCount := Length(DateiRec.Inhalt);
// Datei anlegen/öffnen -> Varianten zum Öffnen siehe Hilfe
FileStream := TFileStream.Create('F:\Worktemp\MyFile.dat',fmCreate or fmShareExclusive);
// Header schreiben
FileStream.Write(DateiRec.Name,SizeOf(DateiRec.Name));
FileStream.Write(DateiRec.Copyright,SizeOf(DateiRec.Copyright));
FileStream.Write(DateiRec.Autor,SizeOf(DateiRec.Autor));
FileStream.Write(DateiRec.InhaltCount,SizeOf(DateiRec.InhaltCount));
// Body schreiben
for i := 1 to DateiRec.InhaltCount {Length(DateiRec.Inhalt)} do
FileStream.Write(DateiRec.Inhalt[i-1], SizeOf(TInhalt));
FileStream.Free schießt danach die Datei, aber das machst ja im finally Block. Lesen im Prinzip umgekehrt, also der High-Wert der for Schleife durch Lesen des "Header" ermitteln.
PS: wenn ich das so sehe, evtl .Name in .AutorName ändern.