C++ Programming Series: File I/O

In this post, we are going to discuss about input and output. No, I am not talking about cout, cin, getline() or any other methods we have discussed till now. I am talking about writing and reading files.

For working with files, we need to include another header called fstream.

There are three classes in it, for file I/O:

  • ofstream – Class for writing files
  • ifstream – Class for reading files
  • fstream – Class for writing as well as reading files

We are going to discuss ofstream and ifstream only. fstream is a bit different to use but who cares! We don’t need that!

The codes for file I/O are present below. It is pretty simple and there is more comment in the code than the code itself, for explaining things!

File Writing:

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
  //The 'ofstream' class for writing a file
  ofstream fileWriter("a_file.txt");

  int number = 21;

  //Writing the stuff
  fileWriter << number;
  fileWriter << " ";
  fileWriter << 13;

  //Closing that file which is opened; it is important!
  fileWriter.close();

  return 0;
}

File Reading:

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
  //The 'ifstream' class for reading a file
  ifstream fileReader;

  //Opening a file called 'a_file.txt' in local directory
  fileReader.open("a_file.txt");

  //For checking whether the file fails to open or not
  if (fileReader.fail())
    cout << "There is no file in the address!" << endl;

  //While the file that is opened, has some context
  //in it at the pointer location
  while (fileReader.good())
  {
    //Variable to store reading from the file
    int number;

    //Reading the number at the pointer location and then,
    //proceeding the pointer forward for further reading
    fileReader >> number;

    //Displaying the number present in the file
    cout << number << endl;
  }

  //Closing that file which is opened; it is important!
  fileReader.close();

  return 0;
}

Reading and writing a file requires us to have the concept of a pointer. The pointer points to some place in the file which then, proceeds forward with every single read/write operation. That pointer is similar to the one which appears at the time of typing.

I hope that you understood how to read and write a file. But there are still some doubts and confusions!

The first one is the formatting of the file that we are reading. White spaces are something that no one wants to read/get from the file. So, ifstream don’t consider these spaces and no matter how much white space there is, it will be considered as one space only.

Of course, we can’t just read data as discrete if that data is arranged without spaces in between. For example, if the file contains two words without any space like this, “nospace”, ifstream reads it as “nospace” and so, giving a space between them rectifies the issue.

The second one is the data type for reading and writing a file. We can use all primitive types. We can use strings as well if we include the string header.

The third one is formatting a file being written. We can have formatting by just writing in character literals like \t or \n to have a tab or a new line respectively.

This is how we simply read and write files. Now, your task is to modify the registration program that we made with functions previously, to write a file with the data inputted by the user.

Soon we will see, how much fun is programming! It is fun for me as I am developing a game in C++ called SamuraiDuel.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s