处理网络/文件系统调用时防止异常(预防性维护)



我有一个朋友在这件事上与我意见相左,我只是想得到一些反馈,看看在这种情况下谁对谁错。

FileInfo file = ...;
if (file.Exists)
{
    //File somehow gets deleted
    //Attempt to do stuff with file...
}

我的朋友指出的问题是,"那么,当我检查文件是否存在时,如果文件存在怎么办?没有什么可以防止的,在检查之后,文件被删除并试图访问它会导致异常。那么,提前检查是否存在值得吗?"

我唯一能想到的是MSDN显然在他们的例子中做了检查,所以肯定还有更多的内容。MSDN-FileInfo。但是,它确实让我想。。。额外的电话值吗?

我将同时拥有if (file.Exists)try catch。仅仅依靠异常处理并不能明确地表达您的想法。CCD_ 3是自我解释的。

如果有人在检查和处理该文件之间的那一毫秒内删除了该文件,您仍然可以得到一个异常。尽管如此,也有其他条件,这可能会导致异常:文件是只读的;您没有所请求的安全权限,等等。

我在很大程度上同意你的朋友的观点(上下文取决于你是否在问题中隐瞒了相关信息)。这是一个异常的例子,它可能发生在您华丽的代码之外。检查文件是否存在并执行操作是竞争条件。

事实上,这种异常可能会发生,你无法阻止它。你必须抓住它。它完全超出了你的控制。例如,如果网络瘫痪,闪电击中数据中心并起火,或者松鼠啃穿电缆,该怎么办?虽然尝试并找出代码引发异常的每一种方式是不现实的,但在知道这是一种很好的可能性并尽最大努力处理它的情况下,尽最大努力是一种好的做法。

我认为这取决于上下文。如果文件刚刚创建,然后运行了这个进程,那么检查它是否存在是没有意义的。您可以假设它是这样做的,因为代码仍在执行中。

然而,如果这是一个被连续删除的文件&创建,那么是的,在继续之前确保它的存在是有意义的。

另一个因素是谁/什么在访问该文件。如果有多个客户端访问该文件,则文件被修改/删除的可能性更大,因此检查该文件是否存在是有意义的。

最新更新