VS8 无法处理 file.close();file.open();,为什么?
VS8 can't handle file.close(); file.open();, why?
我有,可能是微不足道的问题,但我不能理解它。我已经写了简单的代码:
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()
)。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 为什么在全局范围内使用"extern int a"似乎不行?
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 为什么会发生堆损坏
- 为什么 VScode 在 .h 文件中显示"'iostream' file not found"?
- 为什么打开许多文件时"open file failed"?
- 为什么返回的 FILE* 在 popen() 中的命令失败时保留数据
- 为什么你会选择"a.out file"而不是"a.out < file"反之亦然?C++
- 为什么我会得到"end of file found before the left brace '{' in hashtable.h(8)"?
- 为什么我在打开的FILE*上使用QTextStream时出错
- 为什么我的开发 c++ "can't open output file"?
- 当查看FILE流的地址时,为什么地址与原始指针的地址大不相同
- 为什么 file.write() 不按照我给出的顺序存储字节?C++
- VS8 无法处理 file.close();file.open();,为什么?
- 为什么std::FILE用大写字母表示?
- 为什么在Apache 2.2模块中调用ap_hook_type_checker函数时,request_rec::file
- c ++ 为什么当我声明变量时,变量"file"未声明?
- 为什么 C <stdio.h> FILE* fread() 比 Win32 ReadFile() 快?