FSEEK并不时文件中的“a”(追加)模式下打开工作(fseek does not work whe

2019-06-24 13:15发布

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

成功返回:“someteis一”

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

不工作。 返回“sometextis一个”

任何想法,为什么? 什么是解决这一点,所以第二个码输出完全一样的第一?

Answer 1:

当您在追加模式打开,文件指针返回到文件的每一个写之前结束。 您可以重新定位与指针fseek阅读,但只要你把那个叫写入文件中的函数,指针返回到文件的末尾。

或者,把它的另一种方式,以防止数据丢失,的“写指针”的位置覆盖的“读指示器”的位置。 任何追加后,写指针反弹到新的EOF

在回答这个链接引用了C标准的相应部分。

使用"w+"模式下,如果你想写入文件中的任意地方。 现有的文件将被覆盖。

如果您想追加到最初现有的文件,但后来fseek任意地方,使用"r+"之后fseek(f, 0, SEEK_END)



文章来源: fseek does not work when file is opened in “a” (append) mode
标签: c++ c file fseek