The file-of-record approach worked for me and is nice and simple.
For file IO operations, it is better always declare record with the packed prefix, and explicitly specify the size types. This will help you avoid problems in the future.
In this case, you are lucky, because the size of the Single type is no larger than the size of the Integer type. For example, if you take the Double type instead of the Single type, the size will not be 4 + 8*100, but 8 + 8*100 (on Windows platform).
For greater clarity, it is better to write packed even for arrays, although this is already implied:
type
DataType = packed record
Size: Int32;
Data: packed array[0..99] of Single;
end;