![]() |
Exception bei writeln
Wieso funktioniert der folgende Code nicht ?
Erst wenn ich das Programm zum zweiten Mal starte und die Datei 'Test.txt' schon existiert, gibt es keine Exception ! :roll: Wenn ich die Datei 'Test.txt' lösche und das Programm starte kommt diese Meldung: Exception .......'E/A-Fehler 32'
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var f:Textfile; begin assignfile(f,'Test.txt'); rewrite(f); writeln(f,'blablabla'); closefile(f); end; procedure TForm1.FormCreate(Sender: TObject); begin if not fileexists ('Test.txt') then filecreate('Test.txt'); end; |
Re: Exception bei writeln
Wie sieht denn die FileCreate aus?
|
Re: Exception bei writeln
Aus der Hilfe zu FileCreate:
Zitat:
|
Re: Exception bei writeln
Oh Mann :wall:
Einfach das FileCreate weglassen, dann gehts ! Danke
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var f:Textfile; begin assignfile(f,'Test.txt'); rewrite(f); writeln(f,'blablabla'); closefile(f); end; |
Re: Exception bei writeln
Zitat:
Grund für den Fehler war eine fehlerhafte Verwendung von FileCreate. :warn: siehe Zitat von DeddyH, hast du vergessen das Dataihandle entgegenzunehmen und vorallem hast du vergesen die mit CreateFile geöffnte Datei wieder zu schließen. Und da Rewrite keine Sharing-Rechte zuläßt schlägt der Vorgang, Aufgrund der geöffneten Datei, fehl. |
Re: Exception bei writeln
Das FileCreate war aber hier wirklich überflüssig. Allerdings wäre eine Fehlerbehandlung für das AssignFile,Rewrite...-Gespann schon ganz sinnvoll.
|
Re: Exception bei writeln
Zitat:
Delphi-Quellcode:
....so am besten..
procedure TForm1.FormShow(Sender: TObject);
var f:Textfile; begin try assignfile(f,'Test.txt'); rewrite(f); writeln(f,'blablabla'); closefile(f); except closefile(f); end; end; |
Re: Exception bei writeln
wenn schon, dann so: (verwendete Variablen im Exceptionblock vorher initialisieren)
Delphi-Quellcode:
oder lieber so:
assignfile(f, 'Test.txt');
try Rewrite(f); WriteLn(f, 'blablabla'); CloseFile(f); except CloseFile(f); end;
Delphi-Quellcode:
Aber besser doch erst garkeine Exception auslösen (wird im Beispiel der OH auch so gemacht)
AssignFile(f, 'Test.txt');
try Rewrite(f); WriteLn(f, 'blablabla'); finally CloseFile(f); end;
Delphi-Quellcode:
{$I-}
AssignFile(f, 'Test.txt'); Rewrite(f); WriteLn(f, 'blablabla'); CloseFile(F); {$I+} if IOResult <> 0 then FehlerBehandlung; |
Re: Exception bei writeln
Zitat:
Delphi-Quellcode:
Es gibt sicherlich sinnvolere Fehlerbehandlungen, aber mit diesen Routinen kenne ich mich nicht so gut aus :cyclops:
procedure TForm1.FormShow(Sender: TObject);
var f: TextFile; begin try AssignFile(f, 'Test.txt'); Rewrite(f); WriteLn(f, 'blablabla'); finally CloseFile(f);//das wird auf jeden Fall ausgeführt end; end; |
Re: Exception bei writeln
Der Finally-Block wird aber auch auf jeden Fall aufgerufen.
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz