C#中的事务性文件管理

时间:2015-03-12 10:25:16

标签: c#

我在我的应用程序中有一个场景是我需要从客户端上传一些文件(Zip文件)到服务器,在服务器中我想提取Zip文件并替换我从解压Zip获取的那些文件将文件存入其他文件夹。

我需要替换的文件主要是dll文件。所以有一件事我需要确保所有文件都应该被替换,或者没有一个被替换。

C#中有没有办法实现这一点(比如SQL中的Transaction)?如果在替换文件时发生任何不良事件(例如:没有内存空间),则应该回滚先前文件发生的每个更改。

希望你能理解这个问题。

任何帮助?

2 个答案:

答案 0 :(得分:2)

NTFS允许文件系统事务,请参阅https://msdn.microsoft.com/en-us/magazine/cc163388.aspx

答案 1 :(得分:1)

快速浏览一下,只有我能看到你这样做才会通过https://msdn.microsoft.com/en-us/magazine/cc163388.aspx,这涉及一些本机代码。否则,您可以使用第三方工具,例如http://transactionalfilemgr.codeplex.com/

如果您想自己管理它或采用更简单的方法,我建议在尝试复制新文件之前在某处备份现有文件。这可能是在另一个文件夹或拉链。然后,如果复制失败,则处理此问题并将所有文件还原为其原始状态。

无论您选择什么,请确保您有足够的日志记录,以便您可以看到发生了什么以及是否/何时出现问题:)