2010-01-22 63 views
5

在我的应用程序中,我试图重命名该文件夹,但是如果该文件夹在Windows资源管理器中打开,我将获得一个IOException。如何识别是否在C#中的Windows资源管理器中打开文件夹?如何识别是否打开文件夹?

+0

Windows资源管理器,cmd,其他文件管理器,shell打开/保存对话框。除了资源管理器之外,还有更多的东西可以让这个开放。 – Joey 2010-01-22 15:54:05

+0

您是否想要确定Windows资源管理器是专门打开它,还是仅仅确定某个其他进程是否具有打开的句柄?你想完成什么?捕获异常是一个很好的迹象,表明某些其他进程可以处理它,如果这就是你想要的。 – Dathan 2010-01-22 15:57:05

+0

@Dathan捕捉异常是个好主意,但我们有非常大的代码库的多线程应用程序。如果我们识别出我们已经接受的天气,那就太好了。谢谢 – 2010-01-22 16:02:38

回答

8

catch the IOException?

正如其他人所说的,只是尝试做你想做的事情,如果发生了异常并采取适当的行动,无论在你的情况下如何。

你真的没有太多的选择,因为我看到它,认为:

bool iHaveAccess = CheckAccess(folder); 
if (iHaveAccess) 
{ 
    RenameFolder(folder,newFolderName); 
} 

成功,并呼吁RenameFolder别的锁定该文件夹的checkAccess之间是否会发生什么?那么怎么办?

+0

是的,这是我如何去做。无论如何,你应该可以监控这个。 – Toji 2010-01-22 15:56:03

1

确定某个程序是否打开了一个文件夹,以防止重命名该文件夹是不合理的。因为在您做出决定之后,其他进程可能会启动或停止使用该文件夹。相反,只需执行操作并捕获所产生的异常。

try { 
    Directory.Move("old","new"); 
    return true; 
} catch (IOException) { 
    return false; 
} 
0

一个小的搜索后,我发现this postthis post它们显示了如何编程方式确定哪个进程已锁定文件的各种技术。其中一个应该允许您检查资源管理器是否锁定了该文件夹。