C++ Tutorial/File Stream/file IO Exception

Материал из C\C++ эксперт
Перейти к: навигация, поиск

checks for errors opening file

<source lang="cpp">#include <fstream>

  1. include <iostream>

using namespace std;

int main(){

  ifstream file;  
  file.open("a:test.dat");  
 
  if( !file )  
     cout << "\nCan"t open GROUP.DAT";  
  else  
     cout << "\nFile opened successfully.";  
  cout << "\nfile = " << file;  
  cout << "\nError state = " << file.rdstate();  
  cout << "\ngood() = " << file.good();  
  cout << "\neof() = " << file.eof();  
  cout << "\nfail() = " << file.fail();  
  cout << "\nbad() = " << file.bad() << endl;  
  file.close();  
  return 0;  

}</source>

Handle basic exception

<source lang="cpp">#include <fstream>

  1. include <iostream>
  2. include <vector>
  3. include <string>
  4. include <exception>

using namespace std; void readIntegerFile(const string& fileName, vector<int>& dest) {

 ifstream istr;
 int temp;
 istr.open(fileName.c_str());
 if (istr.fail()) {
   throw exception();
 }
 while (istr >> temp) {
   dest.push_back(temp);
 }

} int main(int argc, char** argv) {

 vector<int> myInts;
 const string fileName = "test.txt";
 try {
   readIntegerFile(fileName, myInts);
 } catch (const exception& e) {
   cerr << "Unable to open file " << fileName << endl;
   exit (1);
 }
 for (size_t i = 0; i < myInts.size(); i++) {
   cout << myInts[i] << " ";
 }
 cout << endl;
 return (0);

}</source>

handles errors during input and output

<source lang="cpp">#include <fstream>

  1. include <iostream>
  2. include <process.h>

using namespace std;

const int MAX = 1000; int buff[MAX];

int main(){

  for(int j=0; j<MAX; j++)
     buff[j] = j;  
  ofstream os;            
                          
  os.open("a:edata.dat", ios::trunc | ios::binary);  
  if(!os){ 
     cerr << "Could not open output file\n"; exit(1); 
  }  
 
  os.write( reinterpret_cast<char*>(buff), MAX*sizeof(int) );  
  if(!os){ 
     cerr << "Could not write to file\n"; exit(1); 
  }  
  os.close();             
 
  for(int j=0; j<MAX; j++)    
     buff[j] = 0;  
 
  ifstream is;            
  is.open("a:edata.dat", ios::binary);  
  if(!is){ 
     cerr << "Could not open input file\n"; exit(1); 
  }  
 
  is.read( reinterpret_cast<char*>(buff), MAX*sizeof(int) );  
  if(!is){ 
     cerr << "Could not read from file\n"; exit(1); 
  }  
 
  for(int j=0; j<MAX; j++){
     if( buff[j] != j ){ 
        cerr << "\nData is incorrect\n"; 
        exit(1); 
     }  
  }
  return 0;  

}</source>

Read a file in try catch block

<source lang="cpp">#include <fstream>

  1. include <iostream>

using namespace std; int main () {

 try{
     char buffer[256];
     ifstream myfile ("test.txt");
     while (! myfile.eof() )
     {
       myfile.getline (buffer,100);
       cout << buffer << endl;
     }
 }catch(...){
    cout << "There was an error !\n";
 }
 return 0;

}</source>

This outputting a line.

throw exception in function cascading

<source lang="cpp">#include <fstream>

  1. include <iostream>
  2. include <stdexcept>

using namespace std; void funcOne() throw(exception); void funcTwo() throw(exception); int main(int argc, char** argv) {

 try {
   funcOne();
 } catch (exception& e) {
   cerr << "Exception caught!\n";
   exit(1);
 }
 return (0);

} void funcOne() throw(exception) {

 string str1;
 string* str2 = new string();
 try {
   funcTwo();
 } catch (...) {
   delete str2;
   throw; // rethrow the exception
 }
 delete str2;

} void funcTwo() throw(exception) {

 ifstream istr;
 istr.open("filename");
 throw exception();
 istr.close();

}</source>