我正在尝试运行一个程序来替换文件中的某些数据。试图被替换的文件的相关部分如下所示:
1 Information 15e+10
2 Information 2e+16
3 Information 6e+2
等等。
有问题的文件在数 GB 范围内可能非常大,据我了解,因为使用整个文件的缓冲区并重写整个文件是不可能/不合理的。好吧,我只想替换值(例如15e+10
)。
这一切都适用于简单ios::in|ios::out
,tellp()
如果我用类似大小的值(15e+10
-> 12e+12
)替换该值,或者即使它的大小更小,因为我可以简单地添加一个额外的空间,可以在一行中忽略(例如15e+10
-> 4e+10
) . 但是,如果我需要用一个长度比文件中已经存在的值(例如6e+2
-> 16e+10
)更长的值替换该值,我就会遇到问题,它将覆盖换行符或开始覆盖下一行中的信息.
我在论坛上搜索过,每个人都说您可以覆盖文件,可以附加到文件末尾,也可以缓冲并重新创建整个文件。无论如何我可以实现正确覆盖值而无需重新创建文件的目标吗?
如果没有,那么如果有问题的多个文件对于内存来说太大了,我怎么能打开 2 个文件(1 个输入 1 个输出)来执行此操作?
注意:我也想避免使用boost::
,因为我需要能够在没有boost库的系统上运行它。