指摘すべきことがいくつかあります。try..except
他の回答/コメントで説明されているように、コードをブロックではなくブロック内にラップする必要がありますtry..finally
。あなたのコード例がどのように機能するのか理解していません。なぜなら、現在書かれているように、例外があったかどうかにかかわらず、メッセージは常に表示されるからです。それはもっと似ているはずです...
try
arqTXT.LoadFromFile(LogPath);
except
on E: EInOutError do begin
ShowMessage('The log file could not be found. Check if the service is running. Message: '
+ E.Message);
end
end;
そのコードは、I/O例外をキャッチして処理します。さまざまなタイプの例外を処理する代わりに、別のタイプの例外を使用するか、すべてのタイプをキャッチEInOutError
するために使用するのが汚い方法です。GetLastErroron E: Exception
を使用して特定のエラーコードを識別し、このエラーコードをさらに認識/ログに記録して、I / O例外が発生したと想定して、何が問題なのか(ファイルがない、読み取り専用など)を正確に知ることもできます。
Delphiで例外を処理する方法を説明する良い記事があります。
もう1つ指摘すべきことは、例外が表示されたときです。デバッグモード(IDEからアプリケーションを実行している)の場合、アプリケーションが単独で実行されているときに表示されない例外も含め、デフォルトですべての例外が表示されます。IDEでこれを無効にすることができます。その記事はDelphi2007に関するものですが、同じオプションがDelphi XE2にもあるため、2010にも適用されるはずです。