I/O Status
/* Name Meaning ios::goodbit No error bits set ios::eofbit 1 when end-of-file is encountered; 0 otherwise ios::failbit 1 when a (possibly) nonfatal I/O error has occurred; 0 otherwise ios::badbit 1 when a fatal I/O error has occurred; 0 otherwise */ #include <iostream> #include <fstream> using namespace std; void checkstatus(ifstream &in); int main(int argc, char *argv[]) { if(argc!=2) { cout << "Usage: Display <filename>\n"; return 1; } ifstream in(argv[1]); if(!in) { cout << "Cannot open input file.\n"; return 1; } char c; while(in.get(c)) { if(in) cout << c; checkstatus(in); } checkstatus(in); // check final status in.close(); return 0; } void checkstatus(ifstream &in) { ios::iostate i; i = in.rdstate(); if(i & ios::eofbit) cout << "EOF encountered\n"; else if(i & ios::failbit) cout << "Non-Fatal I/O error\n"; else if(i & ios::badbit) cout << "Fatal I/O error\n"; }