Textfile-Variable belegt?

Hallo,

ich möchte prüfen ob eine Textfile-Variable belegt wurde nachdem ich OpenFile auf sie angewandt habe.
Gibt es dazu eine Prozedur oder Funktion?

Danke

Hallo,

Die File-Variable wird von AssignFile belegt und dann von Reset, Rewrite, Read, Write, Seek, EOF usw. verwendet.

OpenFile ist etwas systemnäher und arbeitet mit File-Handles, die von CreateFile zurückgegeben werden.

Ich verstehe also deine Frage nicht wirklich. Vielleicht kannst du mir das erklären, dann kann ich dir vielleicht helfen.

Gruß
Jochen

Hallo,

Ok, am besten ich erklär man meine Situation. Meine Programm öffnet an einem bestimmten Zeitpunkt eine Datei und zum Schluss wird sie wieder geschlossen. Wenn man das Programm aber vorm öffnen beendet dann versucht mein Programm eine Datei zu schließen, die nie geöffnet wurde, was dann zu einem Fehler führt. Um diesen Fehler abzufangen will ich einfach testen ob die Datei offen ist.
Ungefähr so:
var a textfile;

AssignFile(a,…);

if aNIL {hier ist mein Problem. Wie kann ich das prüfen} then CloseFile(a);

Hallo,

warum merkst du dir nicht einfach im Programm, ob die Datei geöffnet wurde? Zum Programmstart setzt du zB eine Boolsche Variable (zB „FileWasOpened“) auf FALSE. Wenn die Datei vom Programm geöffnet wird, setzt du FileWasOpened:=TRUE. Beim Beenden des Programms prüfst du dann If WasFileOpened then CloseFile(a). Nochmal in der Übersicht:

var
 a: Textfile;
 WasFileOpened: Boolean;
...
 AssignFile(a,...);
 Reset(a);
 WasFileOpened := True;
...
 if WasFileOpened Then CloseFile(a);
...

Eine viel einfachere Möglichkeit besetht darin, die E/A-Fehlermeldungen beim Schließen der Datei abzufangen:

 {$I-}
 CloseFile(a);
 {I+}

Das ist alles. Der Fehler, der auftritt, wenn a nicht zuvor geöffnet wurde („E/A-Fehler 103“) wird dann unterdrückt. Du kannst mit IOResult dann auch noch nachträglich prüfen, was für ein Fehler aufgetreten ist. Das empfiehlt sich auch beim Versuch, eine Datei zu öffen bzw. zu erstellen. Schau mal unter IOResult in der Online-Hilfe nach.

Gruß,
Jochen

Hallo,

stimmt. An so eine Möglichkeit hab ich gar nicht gedacht. Also denn Danke Jochen.

Hallo,

die übliche Methode, Fehler abzufangen wäre hier ein try-except-block.

try
 CloseFile(MyFile);
except
 //nix machen
end;

kannst statt „except“ natürlich auch „finally“ nehmen, wenns noch irgendwas zu tun gibt.

Gruss, Niels