VS8无法处理file.close(); file.open(),为什么?
我有,可能微不足道的问题,但我不明白。 我写了简单的代码:
fstream file;
file.open("data", ios::in);
if(!file.good()){
file.close();
file.open("data", ios::out);
if(!file.good()) cout<<"not good"<<endl;
file<<"test"<<endl;
file.close();
}
在新鲜的VS8 C ++ Express项目中。 当我运行它并且“数据”不存在时,它创建文件,但也返回“不好”(第二个),所以输出不会写入文件中。 现在来了有趣的事情。 如果我在VS10 C ++ Express和Code :: Blocks 12中编译相同的代码,它工作正常。
为什么这样?
@edit我的朋友在他的电脑上用VS8 C ++ Expres也检查过它。 为他工作。
@ edit2与我的评论“解决方案”相同:
强制使用.clear()清除失败位; 方法似乎工作。 当你在较新的IDE中学习并且必须切换到较旧的IDE时,它会很痛苦。 ,,它提供了很好的教训。 多谢你们。
这是设计。 在C ++ 98中,关闭fstream不会清除错误状态,并且在fstream上调用open()
不会重置错误状态。 有关此问题的讨论,请参阅LWG缺陷#409。
C ++ 11中的行为已更改,如果打开操作成功,则会清除错误状态(通过调用clear()
)。
上一篇: VS8 can't handle file.close(); file.open();, why?
下一篇: Google Maps load API script and initialize inside ember.js view