我有一个数据文件,有时我需要对文件进行更改。更改包括在多个地方更改信息。例如,更改文件末尾附近的一些数据,并更改文件开头附近的一些信息。我希望两次单独的写入都成功或都失败,否则它会处于不确定状态并有效损坏。 .NET 或一般情况下是否有任何内置支持这种情况?
如果不是那么其他人如何解决这个问题? Windows 上的数据库如何解决这个问题?
更新:我不想使用事务性 NTFS 功能,因为它在旧版本的 Windows(例如 XP)上不可用,并且在如上所述的文件覆盖情况下速度很慢。
最佳答案
DB 基本上使用 Journal 概念(至少我知道的那些)。一个想法是,写入操作写入日志,直到 Writer
不提交事务。 (当然这只是基本的描述,很简单)
在您的情况下,它可能是您的文件的副本,您将在其中写入数据,并且如果一切都成功完成,则用它的副本替换原始文件。
替换为:将原始文件重命名为old
,将备份文件重命名为original
。
如果替换失败:这是一个严重错误,该应用程序应通过容错策略进行处理。可能是它通知用户保存操作失败,并尝试恢复。顺便说一下,您随时都有文件的两个副本。一个是写操作刚开始的时候,另一个是写操作完成的时候。
我们在过去的 VS IDE 项目中使用了这种技术,例如工业控制系统,并取得了相当大的成功。
关于c# - 用 C# 和 Windows 编写事务文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7297915/