已经调试过了是正确的,是等价的,为什么是等价的呀,难道ifsream对象默认的是a.is_open()吗??
实验证明,只有is_open()函数判断文件打开状态是准确的,其他的都不准确。
看下面的简单代码,以及运行结果:
//初始状态
ifstream inn;
cout<<inn<<","<<inn.fail()<<","<<inn.good()<<","<<inn.is_open()<<endl;
//dd2.txt文件不存在,不能打开成功
inn.open("dd2.txt");
cout<<inn<<","<<inn.fail()<<","<<inn.good()<<","<<inn.is_open()<<endl;
//dd.txt文件存在,能打开成功
inn.close();
inn.open("dd.txt");
cout<<inn<<","<<inn.fail()<<","<<inn.good()<<","<<inn.is_open()<<endl;
//dd2.txt文件不存在,不能打开成功
inn.close();
inn.open("dd2.txt");
cout<<inn<<","<<inn.fail()<<","<<inn.good()<<","<<inn.is_open()<<endl;
//dd.txt文件存在,能打开成功
inn.close();
inn.open("dd.txt");
cout<<inn<<","<<inn.fail()<<","<<inn.good()<<","<<inn.is_open()<<endl;
运行结果:
win7,vc6.0
结果可见,当第一次打开文件失败之后,fail的返回值和good的返回值就不再变化了,以及inn的值也是如此,只有is_open()函数的返回值是准确的。