fprintf总是写到文件的末尾,即使我在c ++之前倒回(fileptr)

时间:2016-01-01 14:28:20

标签: c++ file file-io io

我想追加一个文件并同时更新它的一些行。 在按照我的意愿追加后,说我只想改变第一行,这就是我试过的:

outputptr = fopen(outputName.c_str(), "ar+b");
cout << ftell(outputptr) << " ";
rewind(outputptr);
cout << ftell(outputptr) << "\n";
fprintf(outputptr, "abc");

但是该代码不会用abc替换前三个字母,而是还附加文件并将abc写入结尾。对于这种情况,cout为60和0,因此指针实际上移到了开头。

如何进入给定文件的任何一行并仅修改该行?

1 个答案:

答案 0 :(得分:4)

模式字段中'a'的定义说:

(我已经删除了与此问题相关的位 - 它也说了其他一些东西)

  

...重新定位操作(fseekfsetposrewind)影响下一步   输入操作,但输出操作将位置移回到   文件结束。 ...

您可能想要"r+b"

http://www.cplusplus.com/reference/cstdio/fopen/