相关疑难解决方法(0)

Windows上的文本文件的事务处理

我有多个Windows程序(在Windows 2000,XP和7上运行),它们处理不同格式的文本文件(csv,tsv,ini和xml).在文件IO期间不要破坏这些文件的内容是非常重要的.多个程序应该可以安全地访问每个文件,并且应该能够抵御系统崩溃.这个SO答案建议使用进程内数据库,所以我正在考虑使用Microsoft Jet数据库引擎,它能够处理分隔的文本文件(csv,tsv),并支持事务.我之前使用过Jet,但我不知道Jet事务是否真的容忍在提交阶段意外崩溃或关闭,我不知道如何处理非分隔文本文件(ini,xml).我不认为尝试手动实现完整的ACIDic文件IO是个好主意.

在Windows上实现文本文件的事务处理的最佳方法是什么?我必须能够在Delphi和C#中执行此操作.

提前谢谢你的帮助.

编辑

让我们看一个基于@ SirRufo的想法的例子.暂时忘掉并发性,让我们专注于容错.

  1. 我将文件的内容读入数据结构以修改某些字段.当我正在将修改后的数据写回文件时,系统可能会崩溃.

  2. 如果我从不将数据写回原始文件,则可以避免文件损坏.这可以通过创建一个新文件轻松实现,每次保存修改时文件名都带有时间戳.但这还不够:原始文件将保持不变,但新写的文件可能已损坏.

  3. 我可以通过在时间戳后面加一个"0"字符来解决这个问题,这意味着该文件尚未经过验证.我将通过验证步骤结束写入过程:我将读取新文件,将其内容与我正在尝试保存的内存中结构进行比较,如果它们相同,则将标志更改为"1".每次程序必须读取文件时,它会通过比较文件名中的时间戳来选择最新版本.只能保留最新版本,可以删除旧版本.

  4. 可以通过在读取或写入文件之前等待命名的互斥锁来处理并发.当程序获得对文件的访问权限时,它必须从检查文件名列表开始.如果要读取文件,它将读取最新版本.另一方面,只有在没有比上次读取的版本更新的版本时才能开始写入.

这是一种粗略,过于简单和低效的方法,但它显示了我正在考虑的内容.编写文件是不安全的,但也许有一些像上面那样的简单技巧可以帮助避免文件损坏.

UPDATE

用Java编写的开源解决方案:

c# windows delphi file-io transactions

9
推荐指数
1
解决办法
2081
查看次数

.net持久资源管理器,用于事务性文件系统访问

我试图围绕在C#中使用System.Transactions命名空间.我在MSDN上找到了一些关于使用资源管理器的文档,但它只涵盖任何细节的易失性内存资源管理器(如Transactional).我基本上在寻找可以在TransactionScope中使用的东西,就像Transactional <>一样,但是用它来写入/修改/删除磁盘上的文件.标准库中是否存在类似的内容?我已经读过NTFS现在有"TxF"允许事务性文件系统访问 - 我期望在.net中找到一些利用它的东西.也许我需要实现自己的?

.net c# ntfs system.transactions txf

7
推荐指数
1
解决办法
1286
查看次数

标签 统计

c# ×2

.net ×1

delphi ×1

file-io ×1

ntfs ×1

system.transactions ×1

transactions ×1

txf ×1

windows ×1