【问题标题】:Won't let me delete a folder that I just moved a file out of?不允许我删除刚刚移出文件的文件夹吗?
【发布时间】:2010-11-12 01:22:47
【问题描述】:

这是我的问题:我刚刚完成了一个应用程序,它允许您在资源管理器中右键单击一个文件并点击一个选项来打开该应用程序。然后,它重命名该文件并将其从文件夹中移出到特定位置,然后删除该文件夹(无论是否为空)。当文件通过 GUI 加载时,这很好,但资源管理器上下文菜单的重点是 GUI 永远不必加载,它只是单个文件的一击奇迹。

但是,当使用上下文菜单时,文件夹不会被删除,并且会引发异常,说明该文件夹正在被另一个进程使用。该文件仍然被移动,所有其他文件仍然被删除。为什么会这样?有什么方法可以显式释放目录上的句柄以使其正常工作?

我会向您展示代码,但它非常基本(即一行,Dir​​ectory.Delete)。我也尝试过使用 DirectoryInfo.Delete 但这没有帮助。就像我说的,它在 GUI 中运行良好。

【问题讨论】:

    标签: c# .net directory windows-explorer


    【解决方案1】:

    我是否正确假设从 GUI 中删除意味着该文件夹当前未在资源管理器中打开,而当您使用上下文菜单删除时,该文件夹(显然)是打开的?如果是这样,this blog 可能会对问题有所了解。另外,another SO question 询问如何关闭资源管理器窗口。可能会有所帮助。

    “Windows NT 系列操作系统保持打开进程当前目录的句柄。”

    【讨论】:

    • 谢谢尼克 - 我的问题已经 100% 解决了,只需使用 Directory.SetCurrentDirectory(AnywhereOtherThanHere) :-)
    【解决方案2】:

    我认为发生的事情是资源管理器在复制或移动文件时试图删除文件夹。您需要做的是创建一个单独的线程,首先移动或复制文件(或多个文件),然后当该线程完成时,删除该文件夹。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-20
      • 2020-02-19
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多