我想给文件写一些行,我需要每行写一次是原子操作。
例如,我有3行:
111111111111111111111111
222222222222222222222222
333333333333333333333333
当我逐行将它们写入文件时,程序可能会被错误退出,因此保存的数据可能是:
11111111111111111111111
222222
这不是我的预期。我希望每一行都是一个事务,一个原子操作。
我该怎么做?
目前我使用Java来做到这一点。
答案 0 :(得分:4)
答案 1 :(得分:2)
如果您确实需要将新行原子写入文件,我想唯一的方法是使用新名称创建副本,编写新行并将新文件重命名为原始名称。重命名操作是原子的,至少在POSIX下。在Windows上,您需要在重命名之前删除原始文件,这会导致在该过程中出现问题时无法恢复文件的问题。
答案 2 :(得分:1)
您可以使用@aix建议的flush / sync。否则(并且更好 - 99.999%可靠)是使用包含事务支持的某种环境(例如数据库)并使用commit
。