在“a”(追加)模式下打开文件时,fseek不起作用

FILE* f = fopen("rajat", "w"); fputs("sometext", f); fseek(f, 6, SEEK_SET); fputs("is a", f); fclose(f); 

成功回归:“someteis a”

 FILE* f = fopen("rajat", "a"); fputs("sometext", f); fseek(f, 6, SEEK_SET); fputs("is a", f); fclose(f); 

不起作用。 返回“sometextis a”

有什么想法吗? 对此有什么解决方案,以便第二个代码输出与第一个完全相同?

在追加模式下打开时,文件指针会在每次写入之前返回到文件末尾。 您可以使用fseek重新定位指针以进行读取,但只要调用写入文件的函数,指针就会返回到文件末尾。

或者,换句话说,为了防止数据丢失,“写指针”的位置会覆盖“读指针”的位置。 在任何追加之后,写指针反弹到新的EOF

此链接的答案引用了C标准的相应部分。

如果要写入文件中的任意位置,请使用"w+"模式。 将覆盖现有文件。

如果您想最初附加到现有文件,但随后将fseek到任意位置,请使用"r+"然后使用fseek(f, 0, SEEK_END)