在C#中重命名文件夹时,如果该文件夹或其任何子文件夹当前由(Windows 7)资源管理器窗口打开,则
即使折叠了父文件夹(或其父文件夹),错误也会持续存在。实际上,特定的资源管理器窗口需要关闭。 因此,资源管理器似乎创建了一些锁,只是为了显示文件夹结构,并且即使实际文件夹不再显示(这纯粹是胡说八道),它也不会释放这些锁。
是否有一种方法可以重命名文件夹(例如使用C#编写程序),该文件夹目前由资源管理器窗口显示或曾经可见(参见上文)?
更新
找到了一种方法,如下面对本问题(请参见下文)所述,使用
System.IO.Directory.Move
会引发System.IO.IOException
(消息为“访问被拒绝”)。
使用命令行RENAME
也会失败。
在第二个资源管理器窗口中使用可以成功。即使折叠了父文件夹(或其父文件夹),错误也会持续存在。实际上,特定的资源管理器窗口需要关闭。 因此,资源管理器似乎创建了一些锁,只是为了显示文件夹结构,并且即使实际文件夹不再显示(这纯粹是胡说八道),它也不会释放这些锁。
是否有一种方法可以重命名文件夹(例如使用C#编写程序),该文件夹目前由资源管理器窗口显示或曾经可见(参见上文)?
更新
找到了一种方法,如下面对本问题(请参见下文)所述,使用
SHFileOperation()
。但是,这种解决方案并不是非常可行(请参见下文)。
D:\a
的目录,并通过资源管理器浏览到该目录。当我执行这段代码Directory.Move("D:\\a", "D:\\b");
时,在资源管理器和地址栏中,文件夹名称会自动更改。 - huysentruitwD:\a\b
,通过资源管理器浏览到D:\a\b
,然后尝试将a
重命名为x
或其他任何名称。在这里它不起作用。现在浏览到a
或计算机
,因此在该窗口中未显示a
或b
(仅显示驱动器)。它仍然不起作用。顺便说一句,没有打开文件,也没有权限问题。 - user2261015IOException
异常,而当资源管理器显示根驱动器时,它可以正常工作。我必须说我是在 Windows 10 上进行测试的,这可能解释了轻微的差异。 - huysentruitw