如何在单个原子操作中移动C#.NET中的目录

时间:2009-03-25 20:43:38

标签: c# .net file filesystems

我需要能够在单个原子操作中移动整个目录,保证系统上的任何其他内容都无法通过在我启动后创建新文件,锁定文件等来破坏操作。

据推测,如果目录在同一个卷上(如果Directory.GetDirectoryRoot()是相同的话),我会使用System.IO.Directory.Move(),否则我将不得不创建一个新的目标目录。其他卷并递归地复制/移动下面的所有目录和文件。

我读过的任何内容都没有显示如何获得.NET中整个目录页的独占锁定,因此可以安全地完成。是否有推荐/支持的方式来执行此操作?

3 个答案:

答案 0 :(得分:3)

Vista 支持支持NTFS卷中的事务:

http://msdn.microsoft.com/en-us/magazine/cc163388.aspx

答案 1 :(得分:1)

您是否可以通过临时重命名“root”目录来解决此问题(此后立即创建一个具有相同名称的目录,以便访问该目录的任何人都不会遇到错误),然后处理重命名目录中的文件?

答案 2 :(得分:0)

我要说的是你真正需要的是一个事务性文件系统......它不是NTFS,虽然已经有MS计划,但它在成为Vista之前就从Longhorn中被切断了(之前就是来自开罗) )。

您可以尝试在移动之前获取目录中每个文件的独占锁定,并使用显式文件读取/写入进行移动,但是递归?我不太确定这是一个好主意......此外,这不会防止添加新文件。

你真的想做什么?你为什么担心并发活动?