【发布时间】:2015-04-12 19:54:00
【问题描述】:
我用 ios::ate 和 ios::out 标志打开了我的 fstream,我注意到文件被截断了。如果我还设置了标志 ios::in,则不会出现此问题。然后输出和输入位置都很好。但我的问题是,如果文件被截断默认值以防 ios::in 标志未设置,那么 ios::ate 标志的意义是什么?
【问题讨论】:
-
确实没有理由单独通过
ios::ate和ios::out。所以不要。
我用 ios::ate 和 ios::out 标志打开了我的 fstream,我注意到文件被截断了。如果我还设置了标志 ios::in,则不会出现此问题。然后输出和输入位置都很好。但我的问题是,如果文件被截断默认值以防 ios::in 标志未设置,那么 ios::ate 标志的意义是什么?
【问题讨论】:
ios::ate 和ios::out。所以不要。
尽管在标准中有所暗示,但 ios::ate 实际上与是否发生截断无关。
在内部,fstream 对象有一个缓冲区(filebuf 对象)。缓冲区的内容是否在您写入时附加到文件中,完全取决于 ios::in 和 ios::out 的组合 - 您需要两者都附加。 (或 ios::app)
ios::ate 不附加缓冲区 - 它可以帮助您计算文件大小和文件中的相对位置。不同的东西。
查看此question 以了解各种模式的讨论 - 您会注意到 ios::ate 对模式没有影响,并且您需要 in|out(或 app)才能获得 +。
【讨论】: