流的奇怪行为

ofstream odd behavior

本文关键字:      更新时间:2023-10-16

我遇到了一个奇怪的流行为,'对我来说最不奇怪。这是我的程序,我使用的是Visual Studio 2010 Express Edition。

int main () {
    std::ofstream file("file.txt");
    file << "something1";
    file.close();
    file.open("file.txt", std::ios::ate | std::ios::in );
    file << "something2";
    file.close();
    return 0;
}

这将产生正确的输出。

物1某物2

现在,如果我用以下代码替换第 9 行,

file.open("file.txt", std::ios::ate);

我得到这个输出。

某物2

但是如果我再次替换第 9 行,这次是用这段代码,

file.open("file.txt", std::ios::ate | std::ios::in );

我得到这个输出。

物1某物2

现在,我想问题是,有人能帮我解决这个问题吗?为什么最后一个解决方案有效,而中间的解决方案不起作用。

编辑:更正了主功能。你每天都能学到一些东西。

ofstream默认为std::ios::trunc - 截断现有内容的标志。 传递std::ios::in将禁用截断(除非还指定了 trunc 标志)。

实际上,规则是,如果使用trunc标志,或者如果使用out标志并且既不in也不app,则fstream执行截断(注意appate不同,app每次写入都会重新定位,而ate只影响初始指针)。 ofstream自动设置out 。 没有out就无法使用trunc

相关文章:
  • 没有找到相关文章