你如何确定MkDir抛出的异常?

时间:2016-05-29 14:32:04

标签: freepascal mkdir

我正在使用Free Pascal Mkdir单元中的System

如果已存在与传递给此过程的名称相同的目录,则会发生错误。将$IOCHECKS编译器指令设置为{$ I-},程序继续,但IOResult设置为错误代码5.如果没有{$ I-}编译器指令,则抛出异常。如果没有被捕获,程序退出时返回代码为5,反映错误。

我想抓住这个SPECIFIC异常,无论它名称如何。但是,我不知道如何找到引发的异常的确切名称。

注意:我已经接受了给出的答案,但有一条我不同意的陈述:

  

异常转换的运行时错误是sysutils的一项功能。

在我的测试中,只需添加一个try / except / end部分就会停止标准运行时错误程序中止(带有消息到stdout)。而程序流程转到“except..end”块并在此之后继续。但是,如果不使用SysUtils单元,则无法确定引发了哪个异常,因为在那里定义了异常类。

1 个答案:

答案 0 :(得分:2)

系统单元有一个基本的"终止与错误代码"例如runerror,这就是你所看到的。这不是一个例外。看起来像这样:

[D:\testing]blaat
Runtime error 5 at $00401437
  $00401437
  $00406E91

除了使用ioresult方法阻止它之外,这是不可恢复的

异常转换的运行时错误是sysutils的一项功能。如果您已经使用了sysutils,它会引发EInOutError并且看起来像这样:

[D:\testing]blaat
 An unhandled exception occurred at $00401557:
 EInOutError: Access denied
 $00401557