如何在C中的最后一行之前添加一行

时间:2009-12-17 09:38:00

标签: c file handle

您好我在Unix平台上使用C语言。请告诉我如何在C的最后一行之前追加一行。我在附加模式中使用了fopen但是我不能在最后一行之前添加一行。

我只想写到文件的第二行。

5 个答案:

答案 0 :(得分:5)

您无需覆盖整个文件。你只需要:

  • 以“rw”模式打开文件,
  • 阅读您的文件以查找最后一行:将其位置(ftell / ftello)存储在文件及其内容中
  • 返回到最后一行(fseek / fseeko
  • 的开头
  • 在最后一行之前写下你想要的任何内容
  • 写下最后一行。
  • 关闭您的文件。

答案 1 :(得分:2)

在标准C中无法直接执行此操作,主要是因为很少有文件系统支持此操作。最简单的方法是将文件读入内存结构(无论如何都可以使用它),在内存中插入行,然后再次写出整个结构,覆盖原始文件。

答案 2 :(得分:1)

附加只附加到最后,而不是中间。

您需要读入整个文件,然后将其写入新文件。您可能从后面开始运气,并找到倒数第二个换行的字节偏移量。然后你就可以阻止写下整个“前奏曲”,添加你的新行,然后发出剩下的预告片。

答案 3 :(得分:1)

您可以找到最后一行结束的地方,将最后一行读入内存,找回该地点,写下新行,然后是最后一行。

找到地方:寻找到最后,减去缓冲区大小。读缓冲区,寻找 新队。如果找不到,请向后搜索两个缓冲区大小,然后重试。

您需要对fopen使用r +模式。

哦,你需要注意文本和二进制模式。您需要使用二进制模式,因为在文本模式下您无法计算跳跃位置,您只能跳转到ftell所获得的位置。您可以通过阅读整个文件并在每行的开头调用ftell来解决这个问题。对于大文件,这将是缓慢的。

答案 4 :(得分:1)

使用fseek跳转到文件末尾,向后阅读,直到遇到换行符。然后插入你的线。 您可能希望通过计算向后读取的字符数来保存正在读取的“最后一行”,然后将其格式化为正确分配的缓冲区。