嗨,我在 Unix 平台上使用 C 语言工作。请告诉我如何在 C 语言的最后一行之前追加一行。我在追加模式下使用了 fopen,但我不能在最后一行之前添加一行。
我只想写入文件的倒数第二行。
您不需要覆盖整个文件。你只需要:
ftell
/ ftello
)存储在文件及其内容中fseek
/ fseeko
)在标准 C 中无法直接执行此操作,主要是因为很少有文件系统支持此操作。最简单的方法是将文件读入内存结构(无论如何你可能都有它),将行插入内存,然后再次写出整个结构,覆盖原始文件。
Append 只追加到末尾,而不是中间。
您需要读入整个文件,然后将其写入新文件。您可能会从后面开始运气,并找到倒数第二个换行符的字节偏移量。然后你可以阻止写整个“前奏曲”,添加你的新行,然后发出剩余的预告片。
你可以找到最后一行结束的地方,将最后一行读入内存,回溯到该地方,写入新行,然后是最后一行。
寻找位置:寻找到最后,减去缓冲区大小。读取缓冲区,寻找换行符。如果未找到,则向后寻找两个缓冲区大小,然后重试。
您需要对fopen
.
哦,您需要注意文本和二进制模式。您需要使用二进制模式,因为在文本模式下您无法计算跳转位置,您只能跳转到从ftell
. 您可以通过阅读整个文件并ftell
在每行的开头调用来解决这个问题。对于大文件,这会很慢。
用于fseek
跳转到文件末尾,向后读取直到遇到换行符。然后插入你的行。您可能希望通过计算向后读取的字符数来保存正在读取的“最后一行”,然后将其 strncpy 到正确分配的缓冲区。