Vielen Dank mKinzler und himitsu
das Problem hat sich gelöst.
Erstens wird die Version und der Highindex in der Datei sehr wohl gespeichert, aber als hex 03 und hex 05. Mein Hexeditor hats mir verraten.
Zweitens, die in der WriteFile für den Array index stehende Variable 'num' wird in der For Schleife als High Index benutzt.
Die Funktion 'length' gibt 3 Indexe aus. Da aber das Array bei Index 0 beginnt, darf die Schleife nur von 0 bis einschlieslich 2 gehen.
Das war wohl Fehlermeldung: "EInOuterror: Versuch über das Dateiende hinauszulesen". Oder auch der EConvertError mit irgendwelchen kryptischen Zeichen ist weg.
Delphi-Quellcode:
procedure TForm1.WriteFile(filename:string);
....
...
begin {WriteFile}
assignFile(fil,filename); rewrite(fil,1); {Create the file}
BlockWrite(fil,ver,sizeof(ver));
num:=length(VBilArray)-1; //<- -1 sonst ist 'num' um 1 zu hoch (num:=high(VBilArray)
BlockWrite(fil,num,sizeof(num));
for i:=0 to high(VBilArray) do
...
...
...
procedure TForm1.ReadFile(filename:string);
var fil: file;
i: integer;
num: byte; {allows up to 65535 records}
ver: byte;
function ReadString:ShortString;
begin {ReadString}
BlockRead(fil,result,1); {Read the length of the string}
BlockRead(fil,result[1],length(result)); //<-Danke Dir,himitsu
end; {ReadString}
...
...
SetLength(VBilArray,num);
Label7.Caption:='in ReadFile: '+'Num: '+inttostr(num)+
'HighVBilArray: '+inttostr(High(VBilArray));
for i:=0 to num-1 do //<- num-1 sonst ERROR
...
...