【问题标题】:How to add one line before the last line in C如何在C中的最后一行之前添加一行
【发布时间】:2009-12-17 09:37:59
【问题描述】:

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

我只想写入文件的倒数第二行。

【问题讨论】:

  • 问题的文字有误导性:“追加”总是暗示“在末尾”,但您要做的是“插入”。
  • 已经提出了几种解决方案,结果都是“给我密码”请求。如果这是家庭作业,应该这样标记。

标签: c file handle


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 不需要写整个文件:你可以只从插入点开始写。
    • 在这种情况下,您必须找到插入点。请注意,我说的是“最简单的方法”——当然还有很多其他方法。
    【解决方案3】:

    Append 只追加到末尾,而不是中间。

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

    【讨论】:

    • 不需要写整个文件:你可以只从插入点开始写。
    【解决方案4】:

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

    寻找位置:寻找到最后,减去缓冲区大小。读取缓冲区,寻找 新队。如果未找到,则向后查找两个缓冲区大小,然后重试。

    fopen 需要使用 r+ 模式。

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

    【讨论】:

    • @Sachin - 不。这不是rentacoder,这是一个帮助网站。我们会帮助您,但我们不会为您写作业(或工作分配)。如果你是 C 的新手,那没关系,但“给我代码”的态度会让你在这个网站上无处可去。
    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-06
      • 2020-04-09
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多