我有一个目录,其中包含复杂的子目录树中的大量文件。
如果我尝试将该目录移动到同一分区上的另一个目录中,理论上该操作可能需要一段时间 - 基本上是重命名操作。 - 只要源目录中没有任何文件正在使用且没有安全问题,对吧?
如果是这样,我如何以编程方式告诉是否可以将目录A移动到B?
是否有任何与锁定相关的API可以帮助我解决这个问题?
我在NTFS分区上使用C#。
答案 0 :(得分:4)
在多任务操作系统上不存在这种“可以工作”的API。它们本身就不可靠,比如检查文件是否被锁定。这样的测试可以返回“未锁定”,然后您的线程可以被抢占,另一个进程中的另一个线程可以锁定该文件。当你的线程重新获得CPU时,你会发现该文件已被锁定,即使测试表明它没有。
执行此操作的唯一方法是实际执行操作,然后查找错误以指示无法执行此操作。 C#中的一个例外,使用 try 语句来捕获IOException。这并不容易处理,但至少NTFS允许您重命名或移动被锁定的文件。
答案 1 :(得分:2)
有很多东西可以让你的移动操作失败:
在制作过程中,你可能还会想到更多。
无论如何,NTFS支持自Vista / 2008以来的事务,因此您可以将任务包装在TransactionScope中:
以下是关于此的文章:http://msdn.microsoft.com/en-us/magazine/cc163388.aspx
这里有一个很棒的教程:community.bartdesmet.net