如何以可恢复(事务)方式写入文件?

时间:2020-05-23 19:09:42

标签: c++ windows file storage ntfs

我在磁盘上有一些文件,其中包含需要经常更新的关键信息。可以安全地假设只有一个进程可以访问该文件,并且该应用程序可以在Windows和NTFS文件系统上运行。

我的目标是防止程序崩溃,断电等情况下可能的数据损坏(例如,部分写入)。在这个问题上,我与磁盘扇区损坏无关。

这是我目前的方法:

写时:

  • 在临时文件中写入新数据。
  • 创建凭证文件。 (此文件保证临时文件具有有效的内容。)
  • 在目标文件中写入新数据。
  • 删除凭证文件。
  • 删除临时文件。

阅读时:

  • 如果凭证文件存在:
    • 将临时文件复制到目标文件。
    • 删除凭证文件。
  • 读取目标文件。
  • 删除临时文件(如果存在)。

问题:

  • 使用我目前的方法,如果我只覆盖文件的几个字节,是否由于某些故障而导致其他字节可能错误地更改?
  • 使用我当前的方法,是否有必要禁用文件缓存,还是在断电的情况下Windows可靠地恢复缓存?
  • 是否通过使用一些有关Windows或NTFS如何工作的知识来提供一种更快的方法?如果是这样,我将对FAT文件系统是否有任何差异感兴趣。

我知道Win32中的事务性NTFS API,但是由于它已被弃用,我不想使用它。

0 个答案:

没有答案
相关问题