为什么 File.Delete 设计为在文件不存在时不抛出?
Why was File.Delete designed not to throw when the file does not exist?
If the file to be deleted does not exist, no exception is thrown.
用低级别 api 隐藏异常情况似乎是一种不好的做法,实际上这似乎是一种罕见的情况。这样做的动机是什么?
如果你试图删除一个不存在的文件,它已经被删除了,所以这并不例外。另一个原因是,如果您在删除之前尝试确认文件的存在,则可能会产生竞争条件:
Should I call File.Exists before calling File.Delete?
This removes an extra operation and avoids any kind of race window.
假设一家餐厅门口有“禁止携带宠物”或“禁止携带枪支”的标志,并且有一台扫描仪来检查。
现在假设你没有宠物也没有枪,你会举手表示你没有吗?任何入口保安会举手说你没有吗?或者您只是转到扫描仪并继续?
所以不,Delete 只会删除它是否存在,而不会抛出任何异常,给出标志或状态。要在删除前检查,您可以使用 File.Exists()
。最好在创建或删除文件之前执行此操作。
If the file to be deleted does not exist, no exception is thrown.
用低级别 api 隐藏异常情况似乎是一种不好的做法,实际上这似乎是一种罕见的情况。这样做的动机是什么?
如果你试图删除一个不存在的文件,它已经被删除了,所以这并不例外。另一个原因是,如果您在删除之前尝试确认文件的存在,则可能会产生竞争条件:
Should I call File.Exists before calling File.Delete?
This removes an extra operation and avoids any kind of race window.
假设一家餐厅门口有“禁止携带宠物”或“禁止携带枪支”的标志,并且有一台扫描仪来检查。
现在假设你没有宠物也没有枪,你会举手表示你没有吗?任何入口保安会举手说你没有吗?或者您只是转到扫描仪并继续?
所以不,Delete 只会删除它是否存在,而不会抛出任何异常,给出标志或状态。要在删除前检查,您可以使用 File.Exists()
。最好在创建或删除文件之前执行此操作。