File Handling in C++

File Handling in C++

2021, Mar 28    

File represents storage medium for storing data or information. Streams refer to sequence of bytes. In Files we store data i.e. text or binary data permanently and use these data to read or write in the form of input output operations by transferring bytes of data. So we use the term File Streams/File handling. We use the header file <fstream>

  • ofstream: It represents output Stream and this is used for writing in files.
  • ifstream: It represents input Stream and this is used for reading from files.
  • fstream: It represents both output Stream and input Stream. So it can read from files and write to files.

Operations in File Handling:

  • Creating a file: open()
  • Reading data: read()
  • Writing new data: write()
  • Closing a file: close()

Creating/Opening a File

We create/open a file by specifying new path of the file and mode of operation. Operations can be reading, writing, appending and truncating. Syntax for file creation: FilePointer.open(“Path”,ios::mode);

  • Example of file opened for writing: st.open(“E:\studytonight.txt”,ios::out);
  • Example of file opened for reading: st.open(“E:\studytonight.txt”,ios::in);
  • Example of file opened for appending: st.open(“E:\studytonight.txt”,ios::app);
  • Example of file opened for truncating: st.open(“E:\studytonight.txt”,ios::trunc);
#include<iostream>
#include<conio>
#include <fstream>

using namespace std;

int main()
{
    fstream st; // Step 1: Creating object of fstream class
    st.open("E:\studytonight.txt",ios::out);  // Step 2: Creating new file
    if(!st) // Step 3: Checking whether file exist
    {
        cout<<"File creation failed";
    }
    else
    {
        cout<<"New file created";
        st.close(); // Step 4: Closing file
    }
    getch();
    return 0;
}

Writing to a File

#include <iostream>
#include<conio>
#include <fstream>

using namespace std;

int main()
{
    fstream st; // Step 1: Creating object of fstream class
    st.open("E:\studytonight.txt",ios::out);  // Step 2: Creating new file
    if(!st) // Step 3: Checking whether file exist
    {
        cout<<"File creation failed";
    }
    else
    {
        cout<<"New file created";
        st<<"Hello";    // Step 4: Writing to file
        st.close(); // Step 5: Closing file
    }
    getch();
    return 0;
}

Here we are sending output to a file. So, we use ios::out. As given in the program, information typed inside the quotes after “FilePointer «“ will be passed to output file.

Reading from a File

#include <iostream>
#include<conio>
#include <fstream>

using namespace std;

int main()
{
    fstream st; // step 1: Creating object of fstream class
    st.open("E:\studytonight.txt",ios::in);   // Step 2: Creating new file
    if(!st) // Step 3: Checking whether file exist
    {
        cout<<"No such file";
    }
    else
    {
        char ch;
        while (!st.eof())
        {
            st >>ch;  // Step 4: Reading from file
            cout << ch;   // Message Read from file
        }
        st.close(); // Step 5: Closing file
    }
    getch();
    return 0;
}

Here we are reading input from a file. So, we use ios::in. As given in the program, information from the output file is obtained with the help of following syntax “FilePointer »variable”.

Close a File

It is done by FilePointer.close().

#include <iostream>
#include<conio>
#include <fstream>

using namespace std;

int main()
{
    fstream st; // Step 1: Creating object of fstream class
    st.open("E:\studytonight.txt",ios::out);  // Step 2: Creating new file
    st.close(); // Step 4: Closing file
    getch();
    return 0;
}

Special operations in a File

There are few important functions to be used with file streams like:

tellp() - It tells the current position of the put pointer. Syntax: filepointer.tellp()

tellg() - It tells the current position of the get pointer. Syntax: filepointer.tellg()

seekp() - It moves the put pointer to mentioned location. Syntax: filepointer.seekp(no of bytes,reference mode)

seekg() - It moves get pointer(input) to a specified location. Syntax: filepointer.seekg((no of bytes,reference point)

put() - It writes a single character to file. get() - It reads a single character from file.

Note: For seekp and seekg three reference points are passed:

  • ios::beg - beginning of the file
  • ios::cur - current position in the file
  • ios::end - end of the file

Below is a program to show importance of tellp, tellg, seekp and seekg:

#include <iostream>
#include<conio>
#include <fstream>

using namespace std;

int main()
{
    fstream st; // Creating object of fstream class
    st.open("E:\studytonight.txt",ios::out);  // Creating new file
    if(!st) // Checking whether file exist
    {
        cout<<"File creation failed";
    }
    else
    {
        cout<<"New file created"<<endl;
        st<<"Hello Friends"; //Writing to file
        
        // Checking the file pointer position
        cout<<"File Pointer Position is "<<st.tellp()<<endl;  
        
        st.seekp(-1, ios::cur); // Go one position back from current position
        
        //Checking the file pointer position
        cout<<"As per tellp File Pointer Position is "<<st.tellp()<<endl; 
        
        st.close(); // closing file
    }
    st.open("E:\studytonight.txt",ios::in);   // Opening file in read mode
    if(!st) //Checking whether file exist
    {
        cout<<"No such file";
    }
    else
    {
        char ch;
        st.seekg(5, ios::beg);  // Go to position 5 from begning.
        cout<<"As per tellg File Pointer Position is "<<st.tellg()<<endl; //Checking file pointer position
        cout<<endl;
        st.seekg(1, ios::cur); //Go to position 1 from beginning.
        cout<<"As per tellg File Pointer Position is "<<st.tellg()<<endl; //Checking file pointer position
        st.close(); //Closing file
    }
    getch();
    return 0;
}

Output:

New file created
File Pointer Position is 13
As per tellp File Pointer Position is 12
As per tellg File Pointer Position is 5
As per tellg File Pointer Position is 6