为什么fstream.open()失败“如果模式同时设置了截断和应用程序”?

时间:2014-11-13 02:35:17

标签: c++ io fstream

我花了很长时间才发现我的.open()来电未打开文件,因为我同时设置了truncapp模式选项。我只是在抓住C++ docs上写的一个小纸条后想出来了。

这似乎是一个奇怪的陷阱。为什么会这样?你能不截断文件,然后才追加?或者这被认为是多余的规范?

2 个答案:

答案 0 :(得分:3)

允许的标志组合在标准的[filebuf.members]中指定。表132给出了可能性:

enter image description here

因此,由于truncapp的组合不在表中,因此需要打开才能失败。

答案 1 :(得分:2)

iostream开放模式大致对应于C库中的fopen模式,fopen具有截断的w模式和a模式附加,但没有两者的组合。