I am trying to organize saving and loading of data changing in size. So the save file needs to store several (unknown and every time different number) of dynamic arrays.
The mistake appears in this MCVE:
procedure TAnnMainF.Button6Click(Sender: TObject);
var
  f: file;
  ari, aro: array of double;
  i, Count: word;
begin
  SetLength(aro, random(5) + 1);
  for i := 0 to High(aro) do
    aro[i] := random(2001) / 2000 - 1;
  AssignFile(f, 'c:\delme\1.txt');
  ReWrite(f);
  Count := Length(aro);
  BlockWrite(f, Count, SizeOf(word));
  BlockWrite(f, aro[0], SizeOf(double) * Count);
  CloseFile(f);
  Reset(f);
  BlockRead(f, Count, SizeOf(word));
  BlockRead(f, ari[0], SizeOf(double) * Count);
  CloseFile(f);
end;
This code results in I/O error 998.
I was trying to declare the type  TDoubleArray = array of Double; and pass ari as a parameter in BlockRead. I also tried to SetLength(ari, Count) before I call BlockRead without any success.
The Answer to this question did not help me. 
The code reads the Count properly but rises an exception at array loading.
What am I doing wrong?
 
     
    