为什么File.Delete设计为在文件不存在时不抛出?

时间:2016-07-21 18:00:03

标签: c# file delete-file

来自MSDN File.Delete

  

如果要删除的文件不存在,则不会抛出任何异常。

让低级api隐藏异常情况似乎是一种不好的做法,事实上这似乎是一种罕见的情况。这个动机的动机是什么?

2 个答案:

答案 0 :(得分:3)

如果您尝试删除不存在的文件,则该文件已被删除,因此不例外。另一个原因是如果您在删除之前尝试确认文件的存在,则可能会创建竞争条件:

Should I call File.Exists before calling File.Delete?

  

这将删除一个额外的操作,并避免任何种类的竞赛窗口。

答案 1 :(得分:0)

想象一家餐厅门口有一个“ No Pets Allowed ”或“ No Guns Allowed ”标志,并且有一台扫描仪可以检查。

现在让我们说你没有宠物也没有枪,你会举手说你没有吗?任何入口保安会举手说你没有吗?或者你只是继续扫描并继续?

所以不,删除只会删除它是否存在,不抛出任何异常,给出标志或状态。要在删除之前进行检查,您可以使用File.Exists()。在创建或删除文件之前,最好先这样做。