在WinXP上使用.NET进行文件系统事务处理

4
我正在客户端使用WinXP和服务器上使用Win2003。
我需要执行原子操作:创建-移动文件,插入-更新数据库。
在WinXP中,有没有关于文件系统事务的良好实践方法? 我知道在Vista / Win2008 / Win7中有TxF事务(NTFS),但在WinXP中没有
我不想使用COM +或其他复杂的解决方案。只需要好的示例代码,以获得良好的实践方法。

Alberto Poblacion的交易和文件操作

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

您可以使用组件服务(COM+)实现补偿资源管理器(CRM)。CRM将提供事务日志,并在系统重新启动期间回滚更改,如果在更新文件时崩溃,但您必须提供代码(在自己的DLL中)来提交和回滚事务,通常是通过将文件移入和移出临时文件夹来完成的。可以通过System.EnterpriseServices命名空间在.Net中完成所有操作。如果我没记错的话,Microsoft官方课程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

Edit.

References:

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个回答

2

有关此事的任何完整源代码示例吗?http://www.codeproject.com/Articles/690136/All-About-TransactionScope - Kiquenet

1

0

在XP中,你无法获得NTFS的真正文件系统事务。尽管如此,你可能并不需要它。

例如,在软件安装方面,你可以通过使用类似Windows Installer的工具,基本上免费获得事务语义。

你最终想要实现什么目标?


我想要做的是:将文件从A文件夹移动到B文件夹,并更新数据库。如果出现任何错误,回滚数据库并“回滚”文件系统中的更改。谢谢。 - Kiquenet

0

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