gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:54:21 26 4
gpt4 key购买 nike

我用 ios::ate 和 ios::out 标志打开我的 fstream,我注意到文件被截断了。如果我还设置了标志 ios::in,则不会出现此问题。然后输出和输入位置就可以了。但我的问题是,如果未设置 ios::in 标志,如果文件被默认截断,那么 ios::ate 标志的意义是什么?

最佳答案

尽管在标准中有所暗示,但 ios::ate 实际上与是否发生截断没有任何关系。

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

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

查看此 question对于各种模式的讨论——您会注意到 ios::ate 对模式没有影响,并且您需要 in|out(或应用程序)才能获得 +。

关于c++ - 为什么在使用标志 ios::ate 和 ios::out 打开时 fstream 被截断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29593940/

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