Problem mit dem auslesen einer textdatei

Ich schreibe ein Programm zum auslesen und weiterverarbeiten von .txt dateien. Dabei bereitet mit untenstehende Prozedur Probleme:
In Zeile 8 bekomme ich beim reset die Fehlermeldung EInOutError ‚I/O error 32‘, kann mir nich erklären warum.
Tut mir Leid wenn der Fehler offensichtilich ist, aber ich bin Anfänger

procedure TForm2.Button3Click(Sender: TObject);
var c,d,e,f,pixelx,pixely :integer;
a: string;
realbreite,reallaenge: real;
ort: array of string;
begin
setlength(ort, 8); // laenge des arrays festlegen
AssignFile(Dateiorte,‚orte.txt‘);
reset(dateiorte);
while not eof(dateiorte) //schleife zum auslesen der datei
do
begin
readln(dateiorte,a); //schreiben einer zeile in a
memo1.lines.add(a);
stringauslesen(a,ort); //a auslesen in 8 strings des arrays
c:=strtoint(ort[3]);
d:=strtoint(ort[4]);
e:=strtoint(ort[5]);
f:=strtoint(ort[6]); // umwandeln der numerischen elemente
realbreite:=umwandlungintrealB(c,d);
reallaenge:=umwandlungintrealL(e,f);
pixelx:=realintegerbreite(realbreite);
pixely:=realintegerlaenge(reallaenge); //berechnung der position im image
punkt_zeichnen(d,f);
end;
closefile(dateiorte);
edit1.text:=ort[1];
end;

Hallo,

Häufigster Grund: Die Datei ist von einem anderen Prozess geöffnet.

Beispiel: Die Datei wurde von Dir angelegt mit

 AssignFile(Dateiorte,'orte.txt');
 Reset(dateiorte);
 // Schleife zum Schreiben in die Datei

und du hast vergessen,

 CloseFile(dateiorte);

aufzurufen.

Oder aber, die Datei ist in einem anderen Programm gedare geöffnet, welches das nochmalige Öffnen verwindert (Excel ist so ein Kandidat).

LG
Jochen

PS: Du machst Quelltext besser lesbar, wenn du ihn in „PRE“-tags setzt, d.h. vor dem Quellcode kommt ein „“ (ohne die Gänsefüßchen!), dahinter in „“ (auch ohne Gänsefüßchen).

Hallo,

ein potentielles Problem liegt darin, dass du den Dateinamen ohne Verzeichnisangabe übergibst. Sicherer wäre z.B (falls die Datei im Anwendungsverzeichnis liegt).

 AssignFile(Dateiorte, ExtractFilePath(Application.ExeName) + 'orte.txt');

Alternativ die Verwendung eines TOpenDialog.

Dann sollte man Dateifunktionalität in einen Try-finally-Block schreiben:

 Assignfile (dat, );
 Reset(dat);
 try
 //Hier mit der Datei arbeiten
 finally
 Closefile(dat);
 end;

Sollte beim Arbeiten mit der Datei ein Fehler auftreten, wird hier auf jeden Fall die Datei noch geschlossen. Das Programm bleibt also in funktionsfähigem Zustand.
Als mögliche Fehlerquelle hast du bei deinem Code z.B. die StrToInt-Funktion, die nur sauber funktioniert, wenn der Text auch einen Integer repräsentiert.

ehrlich gesagt hast du in deinem Code so viel hin- und hergewandele zwischen Werten, nur um scheinbar ein paar Pixel einzulesen, dass ich mich frage, ob es nicht viel einfacher geht. Z.B. auch die Verwendung von in TStrings enthaltenen Funktionen (Wenn du schon ein Memo verwendest).

Gruß, Niels