2013-05-07 145 views
0

我想在打开的文件中更改我的光标位置。跳转到特定行的末尾

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

只要你知道第三行,'fseek'应该可以做到。你能告诉我们你使用'fseek()'不能使用吗? – 2013-05-07 14:51:58

+0

感谢您的回应。我发现我应该用r +模式打开文件。现在'fseek(fp,2,SEEK_SET);'会工作。我该如何寻找最后的线?超量EOL将开始覆盖下一行。 – adamlazz 2013-05-07 15:09:49

+0

你需要知道线的末端是什么位置。这是无可替代的。 – 2013-05-07 15:11:05

回答

2

要查找的位置在文件中,使用fseek()。在C/C++文件处理中没有关于行开始和/或结束位置的知识,除了有“行尾标记”,换行符('\n')之外。

知道在哪里线开始或结束,你必须跟踪自己(例如通过用线fgets()fscanf()或一行元素读通过字符的文件字符与fgetc(),元素,当你发现某些重要的部分,使用ftell()以保存当前位置

请注意,虽然看起来fgets()知道行,但实际上它只是从您在文件中的位置开始读取,而当字符是换行符时,它会停止。关于“这行是40个字符长”

2

你必须fseek到文件的开头,然后用字符阅读getc字符,直到你找到了第三个换行符,然后ungetc(只能unget一个字符)。但请注意,您在不能在之后插入文字,而不覆盖第四行。

(在一个文件中的中间插入通常由复制起始部分,在写入新的数据,然后复制的最后部分执行。)

+0

感谢您的最后一个提示。我现在看到这个问题,我有'fseek'工作。你有任何代码可以解决这个问题吗? – adamlazz 2013-05-07 19:57:24