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