File 将数据附加到文件中,并确保它不';不要堕落

File 将数据附加到文件中,并确保它不';不要堕落,file,file-io,rust,file-writing,File,File Io,Rust,File Writing,我有一个现有的文件,我想向它附加数据,并确保它永远不会(或几乎永远不会)损坏,即使在写入附加数据的过程中出现故障 一种确保文件不会损坏的方法是将数据写入临时文件,然后将临时文件重命名为原始文件 但是使用append来实现这一点更为棘手 我的内存中有整个文件内容(它不是一个大文件),因此我有两个选择: 将原始文件复制到临时文件,将数据附加到临时文件,然后将临时文件mv/重命名为原始文件 将文件的全部内容(包括我要附加的数据)写入临时文件,然后将临时文件mv/重命名为原始文件 这两个选项的缺点是

我有一个现有的文件,我想向它附加数据,并确保它永远不会(或几乎永远不会)损坏,即使在写入附加数据的过程中出现故障

一种确保文件不会损坏的方法是将数据写入临时文件,然后将临时文件重命名为原始文件

但是使用append来实现这一点更为棘手

我的内存中有整个文件内容(它不是一个大文件),因此我有两个选择:

  • 将原始文件复制到临时文件,将数据附加到临时文件,然后将临时文件mv/重命名为原始文件
  • 将文件的全部内容(包括我要附加的数据)写入临时文件,然后将临时文件mv/重命名为原始文件
这两个选项的缺点是,它们比仅将数据附加到原始文件要慢。有更好的方法吗

如果没有,哪个选项更快

我需要这个在Windows、Linux和MacOS上工作


我不确定我使用的编程语言是否相关,但我使用的是Rust来编写数据。

我看不出这两个选项之间的区别。我不是操作系统/文件系统专家,所以我认为其中一个可能由于文件系统优化而更快。你确定两者的性能相同吗?通过请求内核复制文件(不打开原始文件,循环读取到缓冲区然后写入)可能比将整个文件读入内存然后写入(2.选项)更快(1.选项)。两个选项的“附加部分”保持不变。另一个选项是为每个附加添加校验和,读取时将对其进行检查。这更适合大文件。请看。请看:我看不出这两个选项之间的区别。我不是操作系统/文件系统专家,所以我认为其中一个可能由于文件系统优化而更快。你确定两者的性能相同吗?通过请求内核复制文件(不打开原始文件,循环读取到缓冲区然后写入)可能比将整个文件读入内存然后写入(2.选项)更快(1.选项)。两个选项的“附加部分”保持不变。另一个选项是为每个附加添加校验和,读取时将对其进行检查。这更适合大文件。见。见: