想象一下,我在二进制文件pos
和一些大小为f
的缓冲区中有一个位置n
,我想将其转储到{{1}从位置f
开始。而且如果文件的大小小于pos
,我想放大文件,或者如果文件大小更大,则缩短文件(删除pos + n
之后的所有内容)。
这样做的标准,最正确,快速和优雅的方法是什么?
我理解,我必须使用pos + n
,ofstream
等,但不确定如何在必要时删除文件的其余部分。
谢谢!
答案 0 :(得分:0)
在标准c ++中,你必须
pos
到另一个缓冲区trunc
模式pos
如果您可以将自己限制为特定于操作系统的标准,例如POSIX,那么您可以使用更有效的替代方案。
pos
truncate
使用系统调用进入pos + n
长度您可以为此功能编写跨平台包装器以支持不同的操作系统,或者您可以使用现有的包装器。 Boost文件系统具有resize_file
,其作用与POSIX truncate
相同。