4

我遇到了 ofstream 的一个奇怪行为,“对我来说最不奇怪。这是我的程序,我使用的是 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

现在,我想问题是,有人可以帮我解释一下吗?为什么最后一个解决方案有效,但中间一个没有。

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

4

1 回答 1

7

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

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

于 2012-06-04T00:43:57.513 回答