On this page
std::basic_istream<CharT,Traits>::seekg
|
(1) | |
|
(2) |
Sets input position indicator of the current associated streambuf
object.
Before doing anything else, seekg clears eofbit . |
(since C++11) |
seekg
behaves as UnformattedInputFunction, except that gcount()
is not affected. After constructing and checking the sentry object,
fail() != true
, sets the input position indicator to absolute (relative to the beginning of the file) value pos
. Specifically, executes rdbuf()->pubseekpos(pos, std::ios_base::in)
(pubseekpos
, in turn, calls seekpos of the specific buffer, such as basic_filebuf::seekpos
, basic_stringbuf::seekpos
, or strstreambuf::seekpos
). In case of failure, calls setstate(std::ios_base::failbit)
.
fail() != true
, sets the input position indicator to position off
, relative to position, defined by dir
. Specifically, executes rdbuf()->pubseekoff(off, dir, std::ios_base::in)
. In case of failure, calls setstate(std::ios_base::failbit)
.
Parameters
pos | - | absolute position to set the input position indicator to | ||||||||
off | - | relative position (positive or negative) to set the input position indicator to | ||||||||
dir | - | defines base position to apply the relative offset to. It can be one of the following constants:
|
Return value
*this
Exceptions
failure
if an error occurred (the error state flag is not goodbit
) and exceptions()
is set to throw for that state.
If an internal operation throws an exception, it is caught and badbit
is set. If exceptions()
is set for badbit
, the exception is rethrown.
Notes
seekg(n)
is not necessarily equivalent to seekg(n, ios::beg)
. std::basic_ifstream
, for example, requires the absolute position n
to come from tellg()
.
Example
#include <iostream>
#include <sstream>
#include <string>
int main()
{
std::string str = "Hello, world";
std::istringstream in(str);
std::string word1, word2;
in >> word1;
in.seekg(0); // rewind
in >> word2;
std::cout << "word1 = " << word1 << '\n'
<< "word2 = " << word2 << '\n';
}
Output:
word1 = Hello,
word2 = Hello,
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 129 | C++98 | there was no way to indicate a failure | sets failbit on failure |
LWG 136 | C++98 | seekg could set the output stream |
only sets the input stream |
LWG 537 | C++98 | the type of off was off_type& |
corrected to off_type |
See also
returns the input position indicator (public member function) |
|
returns the output position indicator (public member function of std::basic_ostream<CharT,Traits> ) |
|
sets the output position indicator (public member function of std::basic_ostream<CharT,Traits> ) |
|
invokes seekpos() (public member function of std::basic_streambuf<CharT,Traits> ) |
|
[virtual]
|
repositions the file position, using absolute addressing (virtual protected member function of std::basic_filebuf<CharT,Traits> ) |
[virtual]
|
repositions the next pointer in the input sequence, output sequence, or both using absolute addressing (virtual protected member function of std::basic_stringbuf<CharT,Traits,Allocator> ) |
[virtual]
|
repositions the next pointer in the input sequence, output sequence, or both using absolute addressing (virtual protected member function of std::strstreambuf ) |
invokes seekoff() (public member function of std::basic_streambuf<CharT,Traits> ) |
|
[virtual]
|
repositions the file position, using relative addressing (virtual protected member function of std::basic_filebuf<CharT,Traits> ) |
[virtual]
|
repositions the next pointer in the input sequence, output sequence, or both, using relative addressing (virtual protected member function of std::basic_stringbuf<CharT,Traits,Allocator> ) |
[virtual]
|
repositions the next pointer in the input sequence, output sequence, or both, using relative addressing (virtual protected member function of std::strstreambuf ) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/basic_istream/seekg