Seekg

Function in C++

In the C++ programming language, seekg is a function in the `fstream` library (part of the standard library) that allows you to seek to an arbitrary position in a file. This function is defined for ifstream class - for ofstream class there's a similar function seekp (this is to avoid conflicts in case of classes that derive both istream and ostream, such as iostream).

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

* `position` is the new position in the stream buffer. This parameter is an object of type streampos.
* `offset` is an integer value of type streamoff representing the offset in the stream's buffer. It is relative to the `dir` parameter.

`dir` is the seeking direction. It is an object of type `ios_base::seekdir` that can take any of the following constant values:

1. `ios_base::beg` (offset from the beginning of the stream's buffer).
2. `ios_base::cur` (offset from the current position in the stream's buffer).
3. `ios_base::end` (offset from the end of the stream's buffer).

Note: If you have previously got 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, it is wise to clear the fail bit, as shown below.

## Example of seekg

[edit]

#include <fstream>
#include <iostream>

int main()

// Open a new file for input/output operations discarding any current
// content in the file (assumes a length of zero on opening)
std::fstream myFile("test.txt", std::ios::in | std::ios::out | std::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, std::ios::beg);

// Read the next 5 characters from the file into a buffer
char buffer[6];
myFile.read(buffer, 5);

// End the buffer with a null terminating character
buffer[5] = 0;

// Output the contents read from the file and close it
std::cout << buffer << std::endl;

myFile.close();

## Example clearing the fail bit

[edit]

#include <fstream>
#include <iostream>
#include <string>

int main()

std::string line;

// Creates a new ifstream object and associates it with a file passed in via the parameters.
// The object is then checked to see if the end-of-file has been reached, if the file has data
// then this will be false.
std::ifstream myFile(argv[1], std::ios::in);
std::cout << myFile.eof() << std::endl;

// Continuously loops over each line of the file until the end of the file
while (!myFile.eof()) {
std::getline(myFile, line);

// Again outputs the end-of-file status for the stream, this time the answer will be true
std::cout << myFile.eof() << std::endl;

// Seeks to the very beginning of the file, clearing any fail bits first (such as the end-of-file bit)
myFile.clear();
myFile.seekg(0, std::ios::beg);

// Outputs the status of the stream again, the result will be false
std::cout << myFile.eof() << std::endl;

myFile.close();