【问题标题】:Loading a file: Check existence or catch exception加载文件:检查存在或捕获异常
【发布时间】:2014-10-12 20:51:02
【问题描述】:

在一个项目中,我需要从硬盘加载一个文件以进行进一步处理。我编写的代码首先检查文件名是否存在,然后加载文件。

然而,当我进一步思考时,我问自己这是否聪明。您不会通过存在检查来阻止文件,因此(虽然不太可能)在您检查文件是否存在和实际加载文件之间删除文件是可能的。

另一个想法是将加载包装在(在我的情况下)Try + Except 块中,并一起放弃存在性检查。但是,我读到在实际代码流中使用异常是不好的做法。

我应该使用第一种、第二种还是两种方法,并将异常处理作为后备?

【问题讨论】:

    标签: file-io exception-handling


    【解决方案1】:

    MSDN has a note 关于这个问题:

    请注意,在您调用 Exists 方法和对文件执行其他操作(例如删除)之间,另一个进程可能会对文件执行某些操作。

    首先检查文件是否存在并在可以轻松检测到时优雅地处理情况当然不会伤害。然后,Try/Catch 用于真正特殊的情况(即您的后备)。

    “坏习惯”说唱取决于它的使用方式。在您描述的情况下,听起来 Try/Catch 会在一个过程中被捕获和处理。那并不是真正控制代码流,而是按预期使用它。

    如果您要捕获异常,请将其转换并抛出您自己的异常以捕获封装对象(Foo.Bar.DoSomething Throws for Foo to Catch),这将是糟糕的 - 几乎就像意大利面条代码的 NET 版本.也可以affect performance

    【讨论】:

    • 这是有道理的。谢谢。
    【解决方案2】:

    在对文件进行任何操作(编辑、删除、移动等)之前,您将始终检查文件是否存在,最好检查权限 - 取决于您想要做什么以及它是什么类型的文件。 但是,当您真正想要对文件进行更改时,您必须添加到 Try Block。例如,如果您想访问闪存驱动器上的文件并且闪存驱动器已拔出。你无法预测

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 2012-05-12
      • 1970-01-01
      相关资源
      最近更新 更多