回答
您不需要覆盖整个文件。你只需要:
- 在“RW”模式打开文件,
- 阅读您的文件,找到最后一行:存储其在文件中的位置(
ftell
/ftello
)及其内容 - 去回到最后一行的开头(
fseek
/fseeko
) - 在最后一行之前写任何你想要的东西
- 写最后一行。
- 关闭你的文件。
+1,几秒钟之后击败我:-) – 2009-12-17 10:00:53
追加只追加到最后,而不是在中间。
您需要读入整个文件,然后将其写入新文件。您可能从后面开始运气,并找到倒数第二个换行符的字节偏移量。然后,你可以阻止写下整个“序曲”,添加你的新行,然后发出剩下的预告片。
无需编写整个文件:只能从插入点写入。 – mouviciel 2009-12-17 10:01:15
无法直接在标准C中执行此操作,主要是因为很少文件系统支持此操作。最简单的方法是将文件读入内存结构(无论如何你都可能拥有它),将该行插入内存,然后再将整个结构写出来,覆盖原始文件。
无需编写整个文件:只能从插入点写入。 – mouviciel 2009-12-17 10:00:42
在这种情况下,您必须找到插入点。请注意,我说“最简单的方法” - 当然还有很多其他的方法。 – 2009-12-17 10:06:39
您可以找到最后一行结束的位置,将最后一行读入内存,回溯到该位置,写入新行,然后写入最后一行。
要找到的地方:寻找到最后,减去缓冲区大小。读取缓冲区,查找 换行符。如果找不到,请向后寻找两个缓冲区大小,然后重试。
您需要使用fopen
的r +模式。
哦,你需要小心文本和二进制模式。你需要使用二进制模式,因为在文本模式下你不能计算跳转位置,你只能跳到你从ftell
得到的位置。您可以通过阅读整个文件并在每行的开头呼叫ftell
来解决此问题。对于大文件,这将是缓慢的。
@Sachin - Nope。这不是rentacoder,这是一个帮助网站。我们会帮助你,但我们不会为你写作业(或工作分配)。如果你是C的新手,那没关系,但是“给我代码”的态度会让你无法在这个网站上找到你。 – 2009-12-17 10:18:00
使用fseek
跳转到文件结尾,向后读取,直到遇到换行符为止。然后插入你的线。 您可能想通过计算您正在向后读取多少个字符来保存您正在阅读的“最后一行”,然后将其压缩到正确分配的缓冲区。
- 1. jQuery在第四行到最后一行之前添加行
- 2. 在gvim文件的最后一行之前添加四行
- 3. 在文本文件的最后一行之前添加文本
- 4. 在最后一行下方添加行
- 5. 如何在vim的最后一行之前表示行?
- 6. 在最后一行之前附加文件第n行
- 7. 在文件的最后一行之前追加三条新行
- 8. 如何添加类=“最后”到最后一行在环路
- 9. 如何在linux的最后一行添加行数
- 10. 如何使用Javascript在tbody的最后一行添加行
- 11. 如何在uitableview的最后一行添加新行
- 12. 在vim的另一条匹配行之前添加一行
- 13. 如何在$ q.all返回之前运行最后一段代码?
- 14. 如何在最后一行之前插入字符串?
- 15. android tablelaayout动态添加行后添加最后一行
- 16. C#Winapp。,在datagridview的最后一行之后添加空白空间
- 17. 如何在SQL中的每个组的第一行之前添加一行?
- 18. 在底部添加一行作为网格的最后一行
- 19. 如何在使用awk的每一行之前添加'?
- 20. 如何向特定类的最后一行添加表格行?
- 21. 如何在R中的每一行之间添加一行?
- 22. 如何在iOS中添加一行字符串到UITableView的最后一行?
- 23. 如何将一个按钮添加到tableview的最后一行?
- 24. 如何添加一个CSS类到jsGrid的最后一行
- 25. 如何向最后一个表格行添加一个类
- 26. 如何选择最后一行的前一行
- 27. 在添加文本之前添加一个换行
- 28. 如何强调counta之前的最后一行?
- 29. 添加行的最后一列
- 30. VBA仅插入添加最后一行
这个问题的文本是误导性的:“追加”总是暗示“在最后”,但你想要做的是“插入”。 – 2009-12-17 09:42:01
已经提出了几种解决方案,它们都被证明是“gimme da code”请求。如果这是家庭作业,它应该像这样标记。 – lorenzog 2009-12-17 10:56:03