文件出错检测
文件出错检测主要依靠流对象标志位来检测:
ios::eofbit 当遇到输入流尾部时,设置该位。即打开文件进行读操作,当文件进行到尾部时,结束。
ios::failbit 当操作失败时,设置该位。例如文件没有数据时还要进行读操作,操作失败。
ios::hardfail 当文件出现不可恢复的错误时,设置该位。
ios::badfit 当出现无效操作时设置该位。比如文件是只读但要进行写操作。
ios::goodbit 当上述所有状态都未设置时设置该位。表明处于正常
这些状态位可以通过函数来检测:
eof():如果设置了eofbit状态位,该函数返回true或者false。
fail():如果设置了failbit或者hardbit状态位。
bad():如果设置了badbit状态位。
good():如果设置了goodbit状态位。
clear():调用该函数,清初所有状态位。
例程:
#include<iostream>
#include<fstream>
using namespace std;
void showState(fstream&);
void main() {
int num = 10;
fstream testFile("C:\\Users\\张嘉晖\\Desktop\\iss.txt", ios::out);
if (testFile.fail()) {
cout << "打开文件失败!\n";
exit(0);
}cout << "向文件中写数据:\n";
testFile << num;
showState(testFile);
testFile.close();
testFile.open("C:\\Users\\zjh\\Desktop\\iss.txt", ios::in);
if (testFile.fail()) {
cout << "打开文件失败!\n";
exit(0);
}testFile >> num;
showState(testFile);
testFile >> num;
showState(testFile);
testFile.close();
}void showState(fstream &file) {
cout << "当前文件状态如下:\n" ;
cout << " eofbit:" << file.eof() << " ";
cout << " failbit:" << file.fail() << " ";
cout << " badbit:" << file.bad() << " ";
cout << " goodbit:" << file.good() << " "<<endl;
file.clear();
}
运行结果:
向文件中写数据:
当前文件状态如下:
eofbit:0 failbit:0 badbit:0 goodbit:1
当前文件状态如下:
eofbit:1 failbit:0 badbit:0 goodbit:0
当前文件状态如下:
eofbit:1 failbit:1 badbit:0 goodbit:0
第一次出现goodbit说明操作正常,写入字符num。
第二次出现eofbit说明已经到文件末尾。
第三次出现错误,没有读到字符。