在WinXP上使用.NET的文件系统事务

时间:2010-04-22 19:32:17

标签: c# .net transactions filesystems

我在客户端上使用WinXP,在服务器上使用Win2003。

我需要做原子动作:创建移动文件,插入更新数据库。

使用WinXP进行文件系统事务是否有任何良好做法? 我知道在Vista / Win2008 / Win7中有WinXP中的TxF事务(NTFS)但不是

我不想使用COM +,也不想使用其他复杂的解决方案。只需要良好的示例代码,以获得良好的实践。

  

Transactions and file-actions by Alberto Poblacion

     

在早于Vista的Windows版本中,文件系统不是   事务性的,因此您需要一个单独的工具来对您的文件进行事务处理。

     

您可以使用组件服务(COM +)来实现补偿资源   经理(CRM)。 CRM将提供事务日志并将回滚   如果在更新过程中崩溃,系统重新启动时会发生更改   文件,但你必须提供代码(在你自己的DLL中)提交和   回滚转换,通常是通过移入和移出文件   临时文件夹。它可以通过.Net完成.Net   System.EnterpriseServices命名空间。如果我没记错的话,微软   官方课程2557包含一章教授如何创建CRM,   他们使用的例子正是建立在改变的基础上的   文件系统。

     

在较新版本的Windows中,您可以执行事务操作   NTFS:

     

http://msdn.microsoft.com/en-us/library/bb986748(VS.85).aspx

     

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

     

http://codeproject.com/KB/vista/VistaKTM.aspx

编辑。

参考文献:

https://transactionalfilemgr.codeplex.com/

http://www.codeproject.com/Articles/690136/All-About-TransactionScope

http://ayende.com/blog/4528/who-stole-my-transaction

http://www.chinhdo.com/20080825/transactional-file-manager/

http://bmegias.wordpress.com/2010/10/25/ejecutar-acciones-al-finalizar-la-transaccion-transactioncompleted-vs-enlistvolatile/

4 个答案:

答案 0 :(得分:2)

您可以创建自己的类来实现IEnlistmentNotification。

以下是有人做过的示例:http://www.chinhdo.com/20080825/transactional-file-manager/

答案 1 :(得分:0)

在XP中,您不会获得NTFS的 true 文件系统事务。也就是说,你可能不需要它。

例如,通过软件安装,您可以通过使用Windows Installer之类的东西在很大程度上免费获得事务的语义。

您希望最终实现的目标是什么?

答案 2 :(得分:0)

.NET Transactional File Manager应该在XP下运行。

出于兴趣,TxF可能会从未来的Windows版本中撤出(某些功能已在Win 8中弃用)。

请参阅How to write a transaction to cover Moving a file and Inserting record in database?

答案 3 :(得分:0)

您可能希望查看我认为使用事务的File.Replace方法,因为它需要NTFS。 http://msdn.microsoft.com/en-us/library/9d9h163f(v=vs.100).aspx