c# - 如何检查 System.IO.File.Delete 是否成功删除文件

标签 c# asp.net .net asp.net-mvc asp.net-mvc-4

使用 system.io.file 类删除文件后:

System.IO.File.Delete(openedPdfs.path);

如果文件被成功删除,我需要运行一些代码。 只要该方法不返回任何值,我就会在 delete 方法之后检查文件是否存在。如果它仍然存在,我认为操作失败。

问题是,删除方法工作正常,但要删除文件需要几秒钟。 Exist 函数返回 true,因为当时它正在检查文件是否存在。

我如何确定 System.IO.File.Delete(openedPdfs.path); 是否成功完成?

代码:

FileInfo file = new FileInfo(openedPdfs.path);    
System.IO.File.Delete(openedPdfs.path);
if (file.Exists == false)
{ ... }
else 
{ ... }

最佳答案

正如其他人所指出的,File.Delete 方法将在失败的情况下抛出异常。

他们没有说的是在几乎所有情况并非在所有情况下都会抛出异常。

具体来说,File.Delete 方法不会在要删除的文件恰好不存在时抛出异常。


  • 如果我们查看 Official Microsoft Documentation for System.IO.File.Delete ,
  • 如果我们跳过抛出的异常列表,
  • 如果我们继续滚动浏览大量代码示例以到达“备注”部分,
  • 如果继续阅读本节,尽管它主要由琐碎的内容组成,例如
    • “使用任何相对或绝对路径指定文件名”
    • 和“相对路径信息被解释为相对于当前工作目录”
    • 和“要获取当前工作目录,请参阅 GetCurrentDirectory”
  • 然后我们到达了下面隐藏在噪音中的小 gem :

If the file to be deleted does not exist, no exception is thrown.

换句话说,这个函数有意内置了静默失败

在几乎所有情况下,无提示故障都对开发人员的破坏

关于c# - 如何检查 System.IO.File.Delete 是否成功删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14160656/

相关文章:

c# - 读流两次?

C# 和 SQLite : Resource to Array

asp.net - 我的 ASP :menu control is hidden when it contains no items - how can I show it?

.net - 为 SSL HTTPS 创建 asp.net webservice

.net - 适用于 .NET 的嵌入式 CMS

c# - 如何区分从服务器返回的 NotFound 和由于连接不良导致的 NotFound?

c# - 将相当简单的 C# 类库转换为 COM 对象?

asp.net - 获取 ASP.NET MVC 中 Content 文件夹中文件的所有路径

asp.net - Azure 媒体播放器 Silverlight 后备不起作用

c# - 检测 Windows 重新启动是否是由于 Windows 更新