昨天写自己的课设的时候遇到的问题:
首先打开一个文件(这个文件名是不存在的 notexist.txt),打开失败。
再打开另一个文件(这个文件名存在 readme.txt),打开成功。
接着从redame.txt读取一个字符,发现读取失败了。
就是说在文件被打开一次后,第二次打开虽然成功打开,但是发生了错误。
ifstream file ;
char a ;
file.open("notexist.txt");
if ( !file.is_open() )
{
cout << " not exist" <<endl;
}
file.open("readme.txt");
if ( file.is_open())
{
file >> a ;
}
cout << a << endl;
在打开文件前,先建一个测试流
fstream test;
test.open( bc.CommandContent );
if ( !test.is_open() )
{
cout << "文件打开失败!请检查文件名是否正确" << endl;
test.close();
return ;
}
通过查资料发现fstream存在状态:
当被打开第一次以后,状态处于错误状态。
fstream错误状态
fail() , eof() , bad();
failbit , eofbit ,badbit 。
正确状态
good(),
good = 非(fail 或 eof 或 bad)
= =离散太烂。。。见谅。。能看懂吧
在你第一次打开以后。failbit = 1 ;也就是说这个流的状态时错误的。
在使用close()以后,只是关闭文件,并没有销毁,也就是说,此时failbit任然是错误
对策 使用clear()函数:
fstream file ;
char a[100];
file.open("notexist.txt");
if ( !file.is_open() )
{
cout << " not exist" <<endl;
file.close();
}
cout << "isfail " << file.fail() << endl;
cout << "isbad " << file.bad() << endl;
cout << "iseof " << file.eof() <<endl;
cout << "isgood "<< file.good() << endl;
file.clear();
//file.clear(file.eofbit);
cout << "清除后" <<endl;
cout << "isfail " << file.fail() << endl;
cout << "isbad " << file.bad() << endl;
cout << "iseof " << file.eof() <<endl;
cout << "isgood "<< file.good() << endl;
file.open("a.txt",ios::in);
int i = 0 ;
while( file.get(a[i]) )
{
cout << a[i];
}