一种覆盖文件中几个位置的方法

时间:2015-10-02 06:55:30

标签: c++ c configuration-files

我正确地读取了文件中某些位置的值,但是当我需要重写这些值时,我遇到了问题。在我的文件阅读器没有找到他需要的位置之后,这一切都在文件中混乱。有没有办法覆盖整行,并避免这些情况? 我正在使用lseek()函数将文件指针移动到我需要的位置。

2 个答案:

答案 0 :(得分:3)

既然你说“行”,我假设你在谈论文本文件。

在这种情况下:不,没有办法覆盖单行,除了,如果你要写的新行完全相同的长度。

这是因为磁盘上的文件抽象不像在例如编辑文件那样工作。一个文本编辑器,你不能在中间插入/删除而不重写所有的尾随数据。

通常,您需要在内存中构造更改并覆盖整个文件(或至少从更改开始的部分)。

答案 1 :(得分:0)

你可以

  1. 读取要更改的行后的尾部,并将其与更改一起写回,或
  2. 求助于内存映射文件:您可以像使用C字符串一样进行更改,操作系统负责其余部分。
  3. 我更喜欢内存映射文件。当可移植性成为问题时,boost具有可移植性。在使用变体1之前我会考虑这个。