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

如何在单个原子操作中移动C#.NET中的目录,c#,.net,file,filesystems,C#,.net,File,Filesystems,我需要能够在单个原子操作中移动整个目录,确保系统上的任何其他内容都不能通过在启动后创建新文件、锁定文件等方式破坏操作 如果目录在同一个卷上(如果Directory.GetDirectoryRoot()相同),我可能会使用System.IO.Directory.Move(),否则我必须在另一个卷上创建一个新的目标目录,并递归地复制/移动下面的所有目录和文件 我读过的任何文章都没有说明如何获得对.NET中整个目录叶的独占锁,以便安全地完成此操作。有没有推荐/支持的方法可以做到这一点?我想说,您真正需

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

如果目录在同一个卷上(如果Directory.GetDirectoryRoot()相同),我可能会使用System.IO.Directory.Move(),否则我必须在另一个卷上创建一个新的目标目录,并递归地复制/移动下面的所有目录和文件


我读过的任何文章都没有说明如何获得对.NET中整个目录叶的独占锁,以便安全地完成此操作。有没有推荐/支持的方法可以做到这一点?

我想说,您真正需要的是一个事务性文件系统。。。NTFS不是这样的,虽然微软有这样的计划,但它在成为Vista之前是从Longhorn(在成为Vista之前是从Cairo)剪下来的

您可以尝试在移动之前获得目录中每个文件的独占锁,并通过显式文件读/写进行移动,但是是递归的?我不太确定这是个好主意。。。而且,这也不能防止添加新文件


你到底想干什么?你为什么担心并发活动

能否暂时重命名“根”目录(随后立即创建同名目录,以便访问该目录的任何人都不会遇到错误),然后处理重命名目录中的文件?

Vista支持NTFS卷中的事务:


作为一个想法,您可以在执行递归移动之前尝试将文件夹重命名为随机名称(GUID)。。。