不会让我删除我刚刚移出文件的文件夹吗?

时间:2010-11-12 01:22:48

标签: c# .net directory windows-explorer

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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