繁体   English   中英

如何将行写入文件,并且每一行都是一个原子操作?

[英]How to write lines to a file, and each line is a atomic operation?

我想向文件中写一些行,并且我需要写的每一行都是一个原子操作。

例如,我有3行:

111111111111111111111111
222222222222222222222222
333333333333333333333333

当我将它们逐行写入文件时,程序可能会错误退出,因此保存的数据可能是:

11111111111111111111111
222222

这不是我所期望的。 我希望每一行都是一个交易,一个原子操作。

我应该怎么做?


目前,我使用Java来做到这一点。

没有100%可靠的方法来保证这一点。

我认为您可以通过在输出流上调用flush()然后在基础文件描述符上调用sync()来获得最接近的信息。 同样,有些故障模式对此无济于事。

如果您确实需要以原子方式将新行写入文件,我想唯一的方法是使用新名称创建一个副本,编写新行并将新文件重命名为原始名称。 至少在POSIX下,重命名操作是原子的。 在Windows上,您需要在重命名之前删除原始文件,这会带来一个问题,如果在该过程中出现问题,将无法还原该文件。

您可以按照@aix的建议使用冲洗/同步。 否则(更好的是-可靠性达到99.999%)是使用某种包含事务支持的环境(例如数据库)并使用commit

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM