在项目中,我需要从硬盘加载文件以进行进一步处理。我编写的代码首先检查文件名是否存在,然后加载文件。
然而,在进一步思考时,我问自己这是否巧妙。您不会通过存在检查来阻止文件,因此在检查文件是否存在以及您实际加载文件时,文件是否被删除(尽管不太可能)。
另一个想法是将加载包装在(在我的情况下)Try
+ Except
块中,并完全抛弃存在检查。但是我读到使用实例代码流的异常是不好的做法。
我应该使用第一种,第二种或两种方法,将异常处理作为后备吗?
答案 0 :(得分:1)
在对文件执行任何操作(编辑,删除,移动等)之前,您将始终检查文件是否存在,最好是权限 - 具体取决于您想要做什么以及文件的类型。 但是当你真的想要对文件进行更改时,你必须添加到Try Block。例如,如果要访问闪存驱动器上的文件并拔下闪存驱动器。你无法预测
答案 1 :(得分:1)
MSDN has a note关于这个问题:
请注意,在您调用Exists方法和对文件执行其他操作(例如Delete)之间,另一个进程可能会对文件执行某些操作。
肯定不会伤害来检查文件是否存在,并且在可以轻松检测到文件时优雅地处理这种情况。然后,Try/Catch
用于真正特殊的情况(即你的后备)。
"不良做法"说唱取决于它的使用方式。在您描述的情况下,听起来像Try / Catch将在一个过程中被捕获和处理。这并不是真正控制代码流,而是按预期使用它。
如果要捕获异常,请翻译它并为封装对象抛出自己的异常以捕获(Foo.Bar.DoSomething
向Foo
抛出Catch),这样会很糟糕 - 几乎就像一个NET版本的意大利面条代码。它也可以affect performance。