考虑这部分代码:
Try
arqTXT.LoadFromFile(LogPath);
finally
ShowMessage(" The log file could not be found. Check if the service is running. ");
end;
在我的消息之后,会出现一条系统消息,其中包含以下消息:无法打开文件“C:\log.txt”。有没有办法不显示此系统消息?
我正在使用德尔福 2010
谢谢。
考虑这部分代码:
Try
arqTXT.LoadFromFile(LogPath);
finally
ShowMessage(" The log file could not be found. Check if the service is running. ");
end;
在我的消息之后,会出现一条系统消息,其中包含以下消息:无法打开文件“C:\log.txt”。有没有办法不显示此系统消息?
我正在使用德尔福 2010
谢谢。
您想捕获该特定异常(EInOutError
如果我没记错的话)并让发生的其他异常保持不静音。因此,如果您遇到其他一些异常(例如EOutOfMemory
),如果不会被“吞下”,那么您的代码看似正常但已损坏。
try
..
except
on E: EInOutError do
begin
..
end;
end;
您可以在一个构造中拥有多个异常处理程序。任何未处理的异常将继续在 try .. except 块之外传播,直到在其他地方被捕获(例如,默认情况下显示错误框的异常处理程序)。
有几点需要指出。正如其他答案/评论所解释的那样,您应该将代码包装在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
处理不同类型的异常,或者肮脏的方式是使用on E: Exception
捕获所有类型。假设发生 I/O 异常,您还可以使用GetLastError识别特定错误代码并进一步识别/记录此错误代码以准确了解问题所在(文件丢失、只读等)。
这是一篇很好的文章,解释了如何在 Delphi 中处理异常。
要指出的另一件事是当您看到异常时。当您处于调试模式(从 IDE 运行应用程序)时,默认情况下会显示所有异常,即使是您在应用程序自行运行时看不到的异常。您可以在 IDE 中禁用它。那篇文章适用于 Delphi 2007,但我很确定它也应该适用于 2010,因为 Delphi XE2 中的选项相同。
使用解决它
try
exception
on e: exception do
ShowMessage("My Message");
而不是尝试/最终。