Entwickler-Ecke

Dateizugriff - Fehler beim lesen der Datei?


Wolle92 - Di 21.08.07 16:34
Titel: Fehler beim lesen der Datei?
Hallo,
ich abreite grade an eimem Vokabel-Trainer und habe Listen-Dateien für verschiedene Sammlungen mit der Endung .vfl
Das sind aber ganz einfache Text-Dateien aber wenn ich die öffnen und daraus lesen will, dann kriege ich eine Access Violation. Kann mir jemand sagen, was ich falsch mache?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TForm2.Button1Click(Sender: TObject);
var vfl, ls: String//vfl ist der Dateipfad und in ls wird die Zeilenzahl als String gespeichert
    f: TextFile;     //Ist logisch...
    li, i: Integer;  //li ist die Zeilenzahl als Integer und i eine Zählervaraible...
begin
  vfl := ExtractFilePath(Application.ExeName) + 'lists\' + ListView1.Selected.Caption + '.vfl';
  try
    AssignFile(f, vfl);
    Reset(f);
    ReadLn(f, ls);                //In der ersten Zeile der Datei
    li := StrToInt(ls);           //steht die Anzahl der Vokabeln
    SetLength(Form1.ask, li);
    SetLength(Form1.answer, li);
    for i := 1 to li do
    begin
      ReadLn(f, Form1.ask[i]);
      ReadLn(f, Form1.answer[i]);
    end;
    Closefile(f);
  except
    on E: EInOutError do
      ShowMessage('Fehler beim lesen der Datei! Fehler-Code: ' + IntToStr(e.ErrorCode));
  end;
  ListView1.Items.Add.Caption := vfl;
end;


GTA-Place - Di 21.08.07 16:54

Schätzungsweise weil Ask und Answer zu klein sind, bzw. bei 0 anfangen?


Calculon - Di 21.08.07 16:55

Ich bin mir jetzt nicht 100%ig sicher, ob's daran liegt, aber


Delphi-Quelltext
1:
2:
3:
  li := StrToInt(ls);           //steht die Anzahl der Vokabeln 
  SetLength(Form1.ask, li); 
  SetLength(Form1.answer, li);


Deine erzeugten Arrays of string haben nun die Dimension [0..li-1] und da deine Schleife von for i := 1 to li do sprengt das womöglich die Grenzen deines Arrays.

Gruß

Calculon
--

[edit] Mist... zu spät [/edit]