我有一个朋友在这方面与我意见不一致,我只想在这种情况下得到一些关于谁是对错的反馈。
FileInfo file = ...;
if (file.Exists)
{
//File somehow gets deleted
//Attempt to do stuff with file...
}
我的朋友指出的问题是,“那么当我检查存在时文件是否存在怎么办?没有什么可以防止在检查文件被删除后尝试访问它的机会导致例外。那么,事先检查存在是否值得呢?“
我唯一能想到的是,MSDN明确地检查了他们的示例,因此必须有更多内容。 MSDN - FileInfo。但是,它确实让我感到疑惑......额外的电话甚至值得吗?
答案 0 :(得分:3)
我在这里与你的朋友达成一致(上下文取决于你是否隐瞒了你问题中的相关信息)。这是一个可以在宏伟的代码之外发生的异常的示例。检查文件是否存在并执行操作是一种竞争条件。
事实是,可能会发生此异常,并且您无法阻止它。你必须抓住它。这完全不受你的控制。例如,如果网络发生故障,闪电击中您的数据中心并且它着火,或者松鼠通过电缆咀嚼,该怎么办?虽然尝试找出代码引发异常的每一种方式都是不切实际的,但在你知道它是一种很好的可能性并尽力处理它的情况下,最好尽量做到最好。
答案 1 :(得分:3)
我会同时拥有if (file.Exists)
和try catch
。仅依赖异常处理并不明确表达您的想法。 if (file.Exists)
是自我解释的。
如果有人在检查和使用该文件之间的那一毫秒内删除了该文件,您仍然可以获得异常。然而,还有其他条件,可能导致异常:文件是只读的;您没有所请求的安全权限等等。
答案 2 :(得分:0)
我想说这取决于具体情况。如果文件刚刚创建然后运行了这个过程,那么检查它是否存在是没有意义的。你可以认为它确实存在,因为代码仍然在执行。
但是,如果这是一个连续删除的文件&创建,然后肯定在继续之前确保它存在是有意义的。
另一个因素是谁/什么是访问该文件。如果有多个客户端访问该文件,则文件被修改/删除的可能性更大,因此检查文件是否存在是有意义的。