Source of exception_classes2.cpp


  1: //exception_classes2.cpp

  3: #include <iostream>
  4: #include <fstream>
  5: #include <string>
  6: #include <stdexcept>
  7: using namespace std;

  9: #include "utilities.h"
 10: using scobey::pause;

 12: void TestCommandLineArgumentsAndOpenFile
 13:     (
 14:     int argc,         //in
 15:     char* argv[],     //in
 16:     ifstream& inFile //out
 17:     );

 19: int main(int argc, char* argv[])
 20: {
 21:         ifstream inFile;
 22:     TestCommandLineArgumentsAndOpenFile(argc, argv, inFile);
 23:     inFile.close();
 24: }

 26: void TestCommandLineArgumentsAndOpenFile
 27:     (
 28:     int argc,         //in
 29:     char* argv[],     //in
 30:     ifstream& inFile //out
 31:     )
 32: {
 33:         try
 34:         {
 35:                 //Test the command-line arguments
 36:                 if (argc != 4)
 37:                         throw invalid_argument("Error: Program requires 3 arguments.");

 39:                 //Test whether an input file can be opened
 40:                 inFile.open(argv[2]);
 41:                 if (!inFile.is_open())
 42:                         throw runtime_error("Error: " + string(argv[2]) + " could not be opened.");
 43:                 //If file opened OK, process its contents ...
 44:         }
 45:         catch (invalid_argument e)
 46:         {
 47:                 cout << e.what() << endl;
 48:                 Pause(0, "Program is now terminating.");
 49:                 exit(0);
 50:         }
 51:         catch (runtime_error e)
 52:         {
 53:                 //If something went wrong, close any opened files before terminating
 54:                 inFile.close();
 55:                 cout << e.what() << endl;
 56:                 Pause(0, "Program is now terminating.");
 57:                 exit(0);
 58:         }
 59: }