在" a"中打开文件时,fseek不起作用(追加)模式

时间:2012-05-17 07:56:25

标签: c++ c file 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”

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

1 个答案:

答案 0 :(得分:26)

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

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

this link的答案引用了C标准的相应部分。

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

如果您希望最初附加到现有文件,然后fseek添加到任意位置,请使用"r+"后跟fseek(f, 0, SEEK_END)