为什么在使用标志ios :: ate和ios :: out打开时会截断fstream?

时间:2015-04-12 19:54:00

标签: c++ ios fstream

我用ios :: ate和ios :: out标志打开了我的fstream,我注意到该文件被截断了。如果我还设置了标志ios :: in,则不会发生此问题。然后输出和输入位置都很好。但是我的问题是ios :: ate标志是否在未设置ios :: in flag的情况下截断默认文件?

1 个答案:

答案 0 :(得分:2)

尽管标准中有暗示,但ios :: ate实际上与截断是否发生无关。

在内部,fstream对象有一个缓冲区(filebuf对象)。在写入时缓冲区的内容是否附加到文件中,完全取决于ios :: in和ios :: out的组合 - 您需要同时附加两者。 (或ios :: app)

ios :: ate不会附加缓冲区 - 它可以帮助您计算文件中的文件大小和相对位置。不同的事情。

有关各种模式的讨论,请参阅此question - 您会注意到ios :: ate对模式没有影响,并且您需要在| out(或app)中获取+。