IOUtils - 编程方法

时间:2014-03-06 14:29:18

标签: delphi

在IOUtils.pas中,Embarcadero会在出现问题时引发异常。例如,IOUtils.TDirectory.CreateDirectory是一个过程,而不是一个函数,如果无法创建文件夹,则返回true表示成功/ false。在Embarcadero的代码中,CreateDirectory只会引发错误。确实,他们警告你它“注意:如果给定路径无效或无法设置为当前路径,SetCurrentDirectory会引发异常。”

我无法使用IOUtils.pas中的任何功能,因为即使我遇到轻微的IO问题,我也必须继续运行程序。

例如:
我的程序需要处理文件夹中的一些数据并将结果放回那里(由于该文件夹上的意外错误权限,错误可能经常出现)。该计划有很多处理要做到这一点它的用户让它在夜间工作并在早上发现它被阻止在0.2%是不合理的,因为“你没有写权限到x文件夹“消息。 (日志将显示失败的操作)

其他应用程序是一个控制台应用程序。同样,它需要在出现错误时继续前进。一个简单的writeln足以显示消息 我有一个完整的库,可以完成IOUtils所做的事情,但是(如果可能的话)不会引起错误。

只需将其视为无GUI的应用程序或无人监管的应用程序,因此没有人会关心它失败的原因(一个可能的例子是服务)。

那么,我的设计错了吗?为什么Embarcadero选择引发错误而不是使用布尔返回函数?显示我切换到IOUtils并将其所有程序放在try / except?


更新
这就是Embarcadero建议使用他们的单位的方式:

procedure TForm1.btnDeleteClick(Sender: TObject);
var IsRecursive: Boolean;
begin
  try
    ...
    TDirectory.Delete(edSourcePath.Text, IsRecursive);
  except
    { Catch the possible exceptions }
    MessageDlg('Incorrect path', mtError, [mbOK], 0);
    Exit;
  end;
end;

这不是错的吗?他们如何确定路径无效?如果路径正确但驱动器断开连接或着火怎么办?或文件夹被锁定?或者我想出的其他273个可能的原因?


更新2:

图书馆还有旧......嗯,让我们称之为......问题。例如,对于'c:\ Program Files \',TDirectory.Exists仍然返回true(注意路径末尾的空格!)。

GetCreationTime仍无法使用某些文件。

0 个答案:

没有答案