gpt4 book ai didi

c++ - 在 "a"(追加)模式下打开文件时 fseek 不起作用

转载 作者:IT老高 更新时间:2023-10-28 21:56:34 29 4
gpt4 key购买 nike

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

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

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

如果您想先追加到现有文件,然后 fseek 到任意位置,请使用 "r+" 后跟 fseek(f, 0 , SEEK_END).

关于c++ - 在 "a"(追加)模式下打开文件时 fseek 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10631862/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com