Csharp/C#教程:使用网络/文件系统调用时防止exception(预防性维护)?分享


使用网络/文件系统调用时防止exception(预防性维护)?

我有一个朋友在这方面与我意见不一致,我只想在这种情况下得到一些关于谁是对错的反馈。

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

我的朋友指出的问题是,“那么当我检查存在时文件是否存在怎么办?没有什么可以防止在检查文件被删除后尝试访问它会导致exception的可能性。所以,是否值得在前检查存在?“

我能想到的唯一一件事就是MSDN清楚地检查了他们的例子,所以必须有更多。 MSDN – FileInfo 。 但是,它确实让我感到疑惑……额外的电话甚至值得吗?

我会同时拥有if (file.Exists)try catch 。 仅依赖exception处理并不明确表达您的想法。 if (file.Exists)是自我解释的。

如果有人在检查和处理文件之间的那一毫秒内删除文件,您仍然可以获得exception。 然而,还有其他条件,可能导致exception:文件是只读的; 您没有所请求的安全权限等等。

我大部分时间都同意你的朋友(背景取决于你是否隐瞒了你问题中的相关信息)。 这是一个exception的例子,它可以在宏伟的代码之外发生。 检查文件是否存在并执行操作是竞争条件。

事实是,可能会发生此exception,并且您无法阻止它。 你必须抓住它。 这完全不受你的控制。 例如,如果网络发生故障,闪电击中您的数据中心并且它着火,或者松鼠通过电缆咀嚼,该怎么办? 虽然尝试找出代码引发exception的每种方式都是不切实际的,但在你知道它是一种很好的可能性并尽力处理它的情况下,最好尽量做到最好。

我想说这取决于具体情况。 如果文件刚刚创建然后运行了这个过程,那么检查它是否存在是没有意义的。 您可以认为它确实存在,因为代码仍在执行。

但是,如果这是一个不断删除和创建的文件,那么在继续之前确保它存在是有意义的。

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

上述就是C#学习教程:使用网络/文件系统调用时防止exception(预防性维护)?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/989859.html

(0)
上一篇 2021年12月23日
下一篇 2021年12月23日

精彩推荐