【发布时间】:2014-02-24 15:19:26
【问题描述】:
尽管有类似的问题,如here 或here,但我有一个关于不同案例的问题。
通过使用 C/C++,我想将一些字节写入文件。最初文件有数据。简单地说,我更新文件的内容:我打开、写入和关闭。但是,如果它在写入过程中失败并且我们无法处理失败(例如,应用程序崩溃、中断、断电等),那么在下面列表之间的输出文件中可以保证什么?哪些情况可以发生,哪些不能?
- 文件可能为空(已删除现有值且无法写入新值)
- 文件保持锁定状态
- 文件可能同时包含旧值和新值(即前 5 行是新值,后 5 行是旧值)
- 文件可能包含旧值。
- 还有什么我没想到的吗?
如果你能给我独立于操作系统的方法,我会很高兴
谢谢
【问题讨论】:
-
您使用什么模式打开输出文件(写入、追加等)?
-
我正在使用写模式。
-
你想达到什么目的?将数据附加到文件中,以便文件保持原样或安全更新?
-
我想确保案例 3 永远不会发生。其他情况可以被检测到并且可以很容易地处理。但是,如果文件同时包含旧值和新值,我将需要更多控制来检测它。
-
对于每个打开/写入/关闭操作,您是否覆盖了旧文件的全部内容?如果是这样,如何在文件的开头和结尾用一些匹配的元数据包装您的数据。每个 Open/Write/Close 操作都是唯一的,并且可以在以后验证以匹配。如果元数据不匹配,您就知道您遇到了案例 3。