Einzelnen Beitrag anzeigen

Codix32

Registriert seit: 23. Apr 2009
137 Beiträge
 
Delphi 2005 Personal
 
#8

AW: Record Array speichern und lesen...Error

  Alt 12. Sep 2010, 14:06
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
...
...
  Mit Zitat antworten Zitat