0

考虑这部分代码:

Try
  arqTXT.LoadFromFile(LogPath);
finally
  ShowMessage(" The log file could not be found. Check if the service is running. ");
end;

在我的消息之后,会出现一条系统消息,其中包含以下消息:无法打开文件“C:\log.txt”。有没有办法不显示此系统消息?

我正在使用德尔福 2010

谢谢。

4

3 回答 3

5

您想捕获该特定异常(EInOutError如果我没记错的话)并让发生的其他异常保持不静音。因此,如果您遇到其他一些异常(例如EOutOfMemory),如果不会被“吞下”,那么您的代码看似正常但已损坏。

try
  ..
except
  on E: EInOutError do
        begin
          ..
        end;
end;

您可以在一个构造中拥有多个异常处理程序。任何未处理的异常将继续在 try .. except 块之外传播,直到在其他地方被捕获(例如,默认情况下显示错误框的异常处理程序)。

于 2012-08-17T17:51:35.720 回答
1

有几点需要指出。正如其他答案/评论所解释的那样,您应该将代码包装在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 中的选项相同。

于 2012-08-18T03:27:23.910 回答
-1

使用解决它

try

exception
on e: exception do
ShowMessage("My Message");

而不是尝试/最终。

于 2012-08-17T17:36:46.263 回答