流的奇怪行为
ofstream odd behavior
我遇到了一个奇怪的流行为,'对我来说最不奇怪。这是我的程序,我使用的是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
执行截断(注意app
与ate
不同,app
每次写入都会重新定位,而ate
只影响初始指针)。 ofstream
自动设置out
。 没有out
就无法使用trunc
。
相关文章:
- 没有找到相关文章