C#中使用TransactionScope处理文件

19

我一直在使用TransactionScope来处理数据库,感觉很好。我现在想要的是:

using(var scope=new TransactionScope())
{               
    // Do something with a few files...
    scope.Complete();
}

但显然这并不起作用——如果有20个文件,第9个文件发生异常,前8个文件都会保留更改,其余的不变——没有回滚。那么,实现类似于作用域的文件行为的最佳方法是什么?

我希望有一个简单的答案,但如果没有的话,您能否给我一些指针或指向相关文章的链接?

2个回答

8

谢谢,这似乎正是我正在寻找的。 - avance70
2
不幸的是,他们的托管包装器将每个函数都包装在自己的事务范围内。我不得不创建重载,允许我传入自己的范围。 - Jesse C. Slicer
6
FYI,微软正在考虑停用"Transactional NTFS"。http://msdn.microsoft.com/en-us/library/windows/desktop/hh802690%28v=vs.85%29.aspx - Nathan
3
他们现在在MSDN上提供了“替代使用事务性NTFS”的页面,但是阅读了该页面之后,我不得不说它并不是很好的替代方案。 - Sheridan

4
你可以尝试使用 Codeplex 上提供的 .NET 事务文件管理器 库,也可以使用 NuGet。它支持任何文件系统,并不是 Transactional NTFS 的包装器。
从项目描述中可以看出:
Transactional File Manager 是一个 .NET API,支持将文件系统操作(如复制、移动、删除、追加等)包含在事务中。它是 System.Transaction.IEnlistmentNotification 的实现(与 System.Transactions.TransactionScope 一起使用)。

1
感谢@ErwinMayer。由于某种原因,Tx文件管理器库的github和nuget版本不同:github版本包括File.WriteAllBytes,而nuget版本则没有。您可以在此处获取github版本:https://github.com/rsevil/Transactions - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接