【问题标题】:Can't delete file after copy复制后无法删除文件
【发布时间】:2015-10-15 00:11:50
【问题描述】:

在 mscorlib.dll 中发生了 System.IO.IOException 类型的未处理异常

附加信息:该进程无法访问文件pathOfMyFile,因为它正被另一个进程使用。

这是我到达File.Delete 时遇到的错误 我的代码如下所示:

File.Copy(frompath, topath1);
File.Copy(frompath, topath2);
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
File.Delete(frompath);

frompath 是 .png 图像的路径。 我可以做些什么来完成这项工作?

【问题讨论】:

  • topath1topath2topath 是三个不同的变量。您的应用程序或其他应用程序仍持有topath 指向的文件的锁定。显示所有相关代码。
  • 您是要删除 frompath 吗?我假设您不是试图复制文件只是为了转身并删除您刚刚制作的副本。
  • 是的,我写错了
  • 您能否在您的问题中分享一些更相关的细节和您之前的研究?您还对frompath 中的文件做什么? Do you have a virus scanner?根据可以告诉您这一点的工具(例如 Unlocker),谁持有锁?
  • 你能在一个全新的程序中重现这个吗?例如,你把它放到一个新的控制台应用程序中,给它一个路径,它会失败吗?你也说,“不能删除 after 复制。”你是说如果你删除两个 File.Copy 行然后你可以删除?

标签: c# file io


【解决方案1】:

首先您可以删除两个垃圾回收调用,因为它们将被自动处理。

如果复制只是需要时间来完成并且文件系统释放句柄,您可以尝试重复删除直到它工作。您可以忽略 IOExceptions 但确保处理其他类型。

while (true)
{
    Thread.Sleep(50);

    try
    {
        File.Delete(frompath);
        break;
    }
    catch (IOException)
    {
        // Ignore IO exceptions
    }
    catch (Exception)
    {
        // Handle other exceptions
    }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-12-24
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多