c++ - 如何以可恢复(事务)方式写入文件?
问题描述
我在磁盘上有一些文件,其中包含需要经常更新的关键信息。可以安全地假设只有一个进程访问该文件,该应用程序正在 Windows 和 NTFS 文件系统上运行。
我的目标是在程序崩溃、断电等情况下防止可能的数据损坏(例如,部分写入)。在这个问题中,我不关心磁盘扇区损坏。
这是我目前的做法:
在写:
- 将新数据写入临时文件。
- 创建凭证文件。(此文件保证临时文件具有有效内容。)
- 在目标文件中写入新数据。
- 删除凭证文件。
- 删除临时文件。
阅读时:
- 如果凭证文件存在:
- 将临时文件复制到目标文件。
- 删除凭证文件。
- 读取目标文件。
- 删除临时文件(如果存在)。
问题:
- 使用我目前的方法,如果我只覆盖文件的几个字节,其他字节是否可能由于某些故障而错误地更改?
- 使用我目前的方法,是否有必要禁用文件缓存,或者 Windows 是否在断电的情况下可靠地恢复缓存?
- 通过使用 Windows 或 NTFS 如何工作的一些知识,是否有更快的方法?如果是这样,我会对 FAT 文件系统是否有任何差异感兴趣。
我知道 Win32 中的事务性 NTFS API,但我不想使用它,因为它已被弃用。
解决方案
推荐阅读
- android - 获取 Selenium Web 驱动程序以在 android 应用程序中工作
- android - Android 的 SQLite 中生成的表不正确
- flutter - Flutter BLoC - 状态不会触发小部件重建
- mongodb - 如何使用 MongoDB 汇总余额和收入?
- swift - 快速随机化多项选择选项
- python - Pyaudio不被python识别,怎么办?
- ios - SwiftUI 中的按钮处理
- php - 调用未定义的方法 Laravel\Lumen\Routing\Router::fallback()
- javascript - chrome 扩展程序是在单独的线程上运行还是在浏览器的主线程上运行?
- python - 使用 requests.post 遍历多个 url