c# - 用 C# 和 Windows 编写事务文件?

标签 c# windows file transactions

我有一个数据文件,有时我需要对文件进行更改。更改包括在多个地方更改信息。例如,更改文件末尾附近的一些数据,并更改文件开头附近的一些信息。我希望两次单独的写入都成功或都失败,否则它会处于不确定状态并有效损坏。 .NET 或一般情况下是否有任何内置支持这种情况?

如果不是那么其他人如何解决这个问题? Windows 上的数据库如何解决这个问题?

更新:我不想使用事务性 NTFS 功能,因为它在旧版本的 Windows(例如 XP)上不可用,并且在如上所述的文件覆盖情况下速度很慢。

最佳答案

DB 基本上使用 Journal 概念(至少我知道的那些)。一个想法是,写入操作写入日志,直到 Writer 不提交事务。 (当然这只是基本的描述,很简单)

在您的情况下,它可能是您的文件的副本,您将在其中写入数据,并且如果一切都成功完成,则用它的副本替换原始文件。

替换为:将原始文件重命名为old,将备份文件重命名为original

如果替换失败:这是一个严重错误,该应用程序应通过容错策略进行处理。可能是它通知用户保存操作失败,并尝试恢复。顺便说一下,您随时都有文件的两个副本。一个是写操作刚开始的时候,另一个是写操作完成的时候。

我们在过去的 VS IDE 项目中使用了这种技术,例如工业控制系统,并取得了相当大的成功。

关于c# - 用 C# 和 Windows 编写事务文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7297915/

相关文章:

linux - 从多台机器收集文件?

c# - 仅当 XML 发生更改时才从 XML 生成 C# 类

c# - 适合一对 List <string> 对象的数据类型,作为一个容器来容纳这两个对象

c# - 如何覆盖 BoundField 的 Itemstyle-width?

c++ - Windows 10 上的 GetTickCount 值

file - 打印文件的所有行以及其他文件中的匹配行

c# - 将日期从 json 转换为日期时间

windows - 更新核心后MSYS2中找不到的一些主要命令

windows - 从 Windows 路径变量中删除行

python - 从 html selenium 中读取元素