C++ I/O Examples

Reading From Files

Assume that we have a file named data.txt that contains this text:

  Fry: One Jillion dollars.
  [Everyone gasps.]
  Auctioneer: Sir, that's not a number.
  [Everyone gasps.] 

We could use this code to read data from the file, word by word:

  ifstream fin("data.txt");
  string s;
  while( fin >> s ) {
    cout << "Read from file: " << s << endl;
  }

When used in this manner, we'll get space-delimited bits of text from the file:

  Read from file: Fry:
  Read from file: One
  Read from file: Jillion
  Read from file: dollars.
  Read from file: [Everyone
  Read from file: gasps.]
  Read from file: Auctioneer:
  Read from file: Sir,
  Read from file: that's
  Read from file: not
  Read from file: a
  Read from file: number.
  Read from file: [Everyone
  Read from file: gasps.]

Note that in the previous example, all of the whitespace that separated words (including newlines) was lost. If we were interested in preserving whitespace, we could read the file in line-by-line using the I/O getline() function.

  ifstream fin("data.txt");
  const int LINE_LENGTH = 100;
  char str[LINE_LENGTH];

  while( fin.getline(str,LINE_LENGTH) ) {
    cout << "Read from file: " << str << endl;
  }

Reading line-by-line produces the following output:

  Read from file: Fry: One Jillion dollars.
  Read from file: [Everyone gasps.]
  Read from file: Auctioneer: Sir, that's not a number.
  Read from file: [Everyone gasps.]

If you want to avoid reading into character arrays, you can use the C++ string getline() function to read lines into strings:

  ifstream fin("data.txt");
  string s;
  while( getline(fin,s) ) {
    cout << "Read from file: " << s << endl;
  }

Checking For Errors

Simply evaluating an I/O object in a boolean context will return false if any errors have occurred:

  string filename = "data.txt";
  ifstream fin( filename.c_str() );
  if( !fin ) {
    cout << "Error opening " << filename << " for input" << endl;
    exit(-1);
  }