Open In App
Related Articles

Set Position with seekg() in C++ File Handling

Improve Article
Improve
Save Article
Save
Like Article
Like

seekg() is a function in the iostream library that allows you to seek an arbitrary position in a file. It is included in the <fstream> header file and is defined for istream class. It is used in file handling to sets the position of the next character to be extracted from the input stream from a given file. 

Syntax: There are two syntaxes for seekg() in file handling, 

istream&seekg(streampos position);

or

istream&seekg(streamoff offset, ios_base::seekdir dir);

Parameters:

  • position: is the new position in the stream buffer.
  • offset: is an integer value of type streamoff representing the offset in the stream’s buffer. It is relative to the dir parameter.
  • dir: It is the seeking direction. It is an object of type ios_base::seekdir that can take any of the following constant values.

There are 3 directions we use for offset value:

  • ios_base::beg: offset from the beginning of the stream’s buffer.
  • ios_base::cur: offset from the current position in the stream’s buffer.
  • ios_base::end: offset from the end of the stream’s buffer.

Let’s understand through an example,

If we take the following input,

Input : "Hello World"

and seek to 6th position from the beginning of the file

 myFile.seekg(6, ios::beg);

and read the next 5 characters from the file into a buffer, 

char A[6];
myFile.read(A, 5);

then the output will be,

Output : World

Algorithm for the Above Example:

  • Open a new file for input/output operations, discarding any current in the file (assume a length of zero on opening).
  • Add the characters “Hello World” to the file.
  • Seek to 6 characters from the beginning of the file.
  • Read the next 5 characters from the file into the buffer.
  • End the buffer with a null terminating character.
  • Output the contents read from the file and close it.

Program:

CPP




// CPP Program to demonstrate the
// seekg function in file
// handling
#include <fstream>
#include <iostream>
using namespace std;
 
// Driver Code
int main(int argc, char** argv)
{
    // Open a new file for input/output operations
    fstream myFile("test.txt",
                   ios::in | ios::out | ios::trunc);
 
    // Add the characters "Hello World" to the file
    myFile << "Hello World";
 
    // Seek to 6 characters from the beginning of the file
    myFile.seekg(6, ios::beg);
 
    // Read the next 5 characters from the file into a
    // buffer
    char A[6];
    myFile.read(A, 5);
 
    // End the buffer with a null terminating character
    A[5] = 0;
 
    // Output the contents read from the file and close it
    cout << A << endl;
 
    myFile.close();
}


Output:

World

Note: If we previously get an end of file on the stream, seekg will not reset it but will return an error in many implementations. Use the clear() method to clear the end of file bit first. This is a relatively common mistake and if seekg() is not performing as expected.

If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 


Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape, GeeksforGeeks Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out - check it out now!

Last Updated : 05 Apr, 2022
Like Article
Save Article
Previous
Next
Similar Reads