FILE* f = fopen("rajat", "w");
fputs("sometext", f);
fseek(f, 6, SEEK_SET);
fputs("is a", f);
fclose(f);
Run Code Online (Sandbox Code Playgroud)
成功回归:"someteis a"
但
FILE* f = fopen("rajat", "a");
fputs("sometext", f);
fseek(f, 6, SEEK_SET);
fputs("is a", f);
fclose(f);
Run Code Online (Sandbox Code Playgroud)
不行.返回"sometextis a"
有什么想法吗?对此有什么解决方案,以便第二个代码输出与第一个完全相同?
das*_*ght 27
在追加模式下打开时,文件指针会在每次写入之前返回到文件末尾.您可以重新定位指针以fseek进行读取,但只要调用写入文件的函数,指针就会返回到文件末尾.
或者,换句话说,为了防止数据丢失,"写指针"的位置会覆盖"读指针"的位置.在任何追加之后,写指针反弹到新的EOF.
此链接的答案引用了C标准的相应部分.
"w+"如果要写入文件中的任意位置,请使用该模式.将覆盖现有文件.
如果您想最初附加到现有文件,但随后fseek到任意位置,请使用"r+"后跟fseek(f, 0, SEEK_END).