C# 有没有办法立即检查目录是否正在使用?

C# 有没有办法立即检查目录是否正在使用?,c#,windows,file,filesystems,C#,Windows,File,Filesystems,我想用directory.move移动一个目录及其所有子目录 但是,在执行此操作之前,我想检查目录及其子目录中的任何文件和子文件是否正在被其他进程使用 然后,在移动之前,我想将目录锁定到其他进程,这样我可以确保directory.move不会抛出任何异常 实现这一目标的最佳方式是什么 我希望避免逐个文件检查单个文件的使用情况,因为软件检查文件时不使用该文件并不意味着移动过程开始时不会使用该文件。无法锁定文件夹(+子文件夹)所以,你总是会以一个错误而告终,而且也不能保证不会有例外 总是有可能在支票

我想用directory.move移动一个目录及其所有子目录

但是,在执行此操作之前,我想检查目录及其子目录中的任何文件和子文件是否正在被其他进程使用

然后,在移动之前,我想将目录锁定到其他进程,这样我可以确保directory.move不会抛出任何异常

实现这一目标的最佳方式是什么


我希望避免逐个文件检查单个文件的使用情况,因为软件检查文件时不使用该文件并不意味着移动过程开始时不会使用该文件。

无法锁定文件夹(+子文件夹)所以,你总是会以一个错误而告终,而且也不能保证不会有例外

总是有可能在支票和移动之间发生变化,因此事情可能会出错

只需尝试移动文件夹,如果不成功,请稍后重试

另请参见:(这是一个类似的问题,忽略Delphi部分)

说明 你可以试试你的文件选择。。挡块 和catch
IOException

样品 更多信息

我添加了一个Windows标记。你能更具体地说明你使用的是哪个版本的Windows吗?我使用的是Windows 7,但我希望它能在尽可能多的Windows版本上工作。我想不出一个现实的场景,在这个场景中,由于文件锁定,这可能会失败。这不是Windows的工作方式,重命名锁定的文件不是问题。如果您实际上正在将目录移动到另一个驱动器,那么,是的,这可能是一个问题。因此,请改用Copy()并在以后删除。考虑到您使用的是.Net 4+,您还可以使用
Task.Delay(新的时间跨度(0,0,0,5)).ContinueWith((o)=>WatchDogOnCreated(这是fileSystemEventArgs))与您的代码(放置在catch子句中)结合使用-这确实是一个非常关键的代码,但我发现这是可行的。至少这是一个解决方法。
try 
{
   // try to move
} 
catch (System.IO.IOException ex) 
{
   // file used by another process or other IO Exception
}