虽然有类似的问题,例如here或here,但我对其他案例有疑问。
通过使用C / C ++,我想将一些字节写入文件。最初文件有数据。简单地说,我更新了文件的内容:我打开,写入和关闭。但是,如果它在写入期间失败并且如果我们无法处理故障(例如,应用程序崩溃,中断,电力关闭等),那么下面列表中的输出文件中保证了什么?哪种情况可能发生,哪些情况不可以?
如果你能给我独立于操作系统的方法,我会很高兴
由于
答案 0 :(得分:3)
将新数据写入具有相同名称但扩展名为“tmp”的文件。刷新并关闭tmp文件。删除原始文件。将tmp文件重命名为原始文件名。
启动时,扫描文件夹中的所有文件。删除名称部分与现有“源”文件匹配的所有tmp文件(即系统在tmp文件写入期间被中断)。重命名名称部分与现有源文件不匹配的任何tmp文件(写入tmp文件,原始文件已删除,但系统在重命名之前被中断)。
此系统取决于删除原始文件的原子性。如果成功,则获取新数据,如果失败,则获取旧数据。你永远不应该得到每个部分。