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但没有成功。

任何帮助将不胜感激。

4

2 回答 2

2

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

要知道一行从哪里开始或结束,您必须自己跟踪它(例如,通过逐个字符读取文件,使用fgetc()逐个元素fscanf()或逐行读取文件fgets(),当您找到某些重要部分时,使用ftell()保存当前位置。

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

于 2013-05-07T15:22:58.163 回答
2

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

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

于 2013-05-07T15:20:09.973 回答