我正在尝试在打开的文件中更改光标位置。
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
但没有成功。
任何帮助将不胜感激。
要在文件中查找位置,请使用fseek()
. 在 C/C++ 文件处理中不知道行的开始和/或结束位置,除了存在“行尾标记”换行符 ( '\n'
) 的意义上。
要知道一行从哪里开始或结束,您必须自己跟踪它(例如,通过逐个字符读取文件,使用fgetc()
逐个元素fscanf()
或逐行读取文件fgets()
,当您找到某些重要部分时,使用ftell()
保存当前位置。
请注意,虽然它可能看起来fgets()
知道行,但它实际上只是从您在文件中的位置读取,并且当字符是换行符时,它会停止。但是没有关于“这一行有 40 个字符长”的知识。
你必须到fseek
文件的开头,然后逐个字符地读取,getc
直到你找到第三个换行符,然后ungetc
(只能得到一个字符)。但是请注意,您不能在第三行之后插入文本而不覆盖第四行。
(在文件中间插入通常是通过复制初始部分,写入新数据,然后复制最终部分来执行的。)