C# 事务性地交换两个文件夹

C# transactionally swap two folder

我有两个文件夹,例如“C:\Working”和“C:\Final”。我的程序很慢,需要时会处理“C:\Working”中收到的数据。

当在“C:\Working”中操作数据的程序完成后,我想用最新信息替换旧数据(在“C:\Final”中)到“C:\Working”(信息到“C:\Working”总是完整和最新的)。

所以基本上我想:

  1. 在“C:_Final”中重命名“C:\Final”
  2. 在“C:\Final”中重命名“C:\Working”
  3. 删除“C:_Final”
  4. 创建“C:\Working”(现在为空)

这样,应用程序(使用“C:\Final”)等待的时间就很短了。

所以想到的唯一想法是:

Directory.Move("C:\Final\","C:\_Final\");
Directory.Move("C:\Working\","C:\Final\");
Directory.Delete("C:\_Final\",true);
Directory.CreateDirectory("C:\Working\");

但我认为有更好的方法,我认为这种方法有点棘手,如果出现问题(移动、删除或创建),文件夹结构仍然不一致。 所以我想问一下有没有更好的方法,我希望有一个原子交换目录的方法。

在对 NTFS 原子操作和 NET Framework 对此类操作的支持进行了一些研究之后,我发现了建议在处理文件系统操作时使用事务来实现原子性的主题。

似乎也是,即使本机文件系统操作不支持事务;有一个 Nuget 包 (TxFileManager) 专注于为文件系统操作提供事务支持。 所以事务和上面提到的包的组合应该允许对文件系统进行原子操作