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() )。

链接地址: http://www.djcxy.com/p/71867.html

上一篇: VS8 can't handle file.close(); file.open();, why?

下一篇: Google Maps load API script and initialize inside ember.js view