VS8 无法处理 file.close();file.open();,为什么?

VS8 can't handle file.close(); file.open();, why?

本文关键字:file 为什么 open close VS8 处理      更新时间:2023-10-16

我有,可能是微不足道的问题,但我不能理解它。我已经写了简单的代码:

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();
}

在fresh vs8c++ Express项目。当我运行它并且"data"不存在时,它会创建文件,但也会返回"not good"(第二个),因此输出不会写入文件。现在有趣的事情来了。如果我在VS10 c++ Express和code:: block 12中编译相同的代码,它工作得很好。

为什么会这样?

@edit我的朋友也在他的PC上用vs8c++ express检查了它。他也一样。

@edit2和我的评论"solution"一样:

使用.clear()强制清除failbit;这个方法似乎有效。这很伤我的心当你在新的IDE学习,然后必须切换到旧的IDE:/。不过,它给了我们很好的教训。谢谢。

这是故意的。在c++ 98中,关闭fstream不会清除错误状态,在fstream上调用open()也不会重置错误状态。请参阅LWG Defect #409以获得对该问题的讨论。

在c++ 11中改变了这种行为,如果打开操作成功,错误状态将被清除(通过调用clear())。