【问题标题】:Why is an fstream truncated when it is opened with the flags ios::ate and ios::out?为什么使用标志 ios::ate 和 ios::out 打开 fstream 时会被截断?
【发布时间】:2015-04-12 19:54:00
【问题描述】:

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

【问题讨论】:

  • 确实没有理由单独通过ios::ateios::out。所以不要。

标签: c++ ios fstream


【解决方案1】:

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

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

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

查看此question 以了解各种模式的讨论 - 您会注意到 ios::ate 对模式没有影响,并且您需要 in|out(或 app)才能获得 +。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2015-05-05
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    相关资源
    最近更新 更多