覆盖指定位置的文件内容并截断其余内容

时间:2015-03-25 13:49:42

标签: c++ ofstream

想象一下,我在二进制文件pos和一些大小为f的缓冲区中有一个位置n,我想将其转储到{{1}从位置f开始。而且如果文件的大小小于pos,我想放大文件,或者如果文件大小更大,则缩短文件(删除pos + n之后的所有内容)。

这样做的标准,最正确,快速和优雅的方法是什么?

我理解,我必须使用pos + nofstream等,但不确定如何在必要时删除文件的其余部分。

谢谢!

1 个答案:

答案 0 :(得分:0)

在标准c ++中,你必须

  • 将文件读取到pos到另一个缓冲区
  • 使用trunc模式
  • 打开文件
  • 将文件内容重写为pos
  • 写转储

如果您可以将自己限制为特定于操作系统的标准,例如POSIX,那么您可以使用更有效的替代方案。

  • 寻求pos
  • 写转储
  • truncate使用系统调用进入pos + n长度

您可以为此功能编写跨平台包装器以支持不同的操作系统,或者您可以使用现有的包装器。 Boost文件系统具有resize_file,其作用与POSIX truncate相同。