跳到特定行的末尾

时间:2013-05-07 14:48:25

标签: c file-io stdio

我正在尝试更改已打开文件中的光标位置。

fp = fopen("dirty", "a+");
fprintf(fp, "Text at end of file");

// seek to end of third line (eg.)

fprintf(fp, "Text at end of third line");

我已尝试关闭并重新打开该文件,fseek无效。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

您必须fseek到文件的开头,然后通过char getc读取char,直到找到第三个换行符,然后ungetc(只能完全忘记一个字符)。但请注意,不能在第三行之后插入文本而不覆盖第四行。

(在文件中间插入通常是通过复制初始部分,写入新数据,然后复制最终部分来执行的。)

答案 1 :(得分:2)

要在文件中查找位置,请使用fseek()。除了有“行结束标记”,换行符('\n')的意义外,不了解C / C ++文件处理知道行开始和/或结束的位置。

要了解行的开始或结束位置,您必须自己跟踪(例如,使用fgetc()按字符逐个阅读文件,逐个元素fscanf()或逐行{{1}当您找到某些重要部分时,请使用fgets()保存当前位置。

请注意,虽然可能看起来ftell()知道线条,但它实际上只是从文件中的位置读取,而当字符是换行符时,它会停止。但是没有关于“这条线长40个字符”的知识。