std::basic_istream<CharT,Traits>::seekg
basic_istream& seekg( pos_type pos ); | (1) | |
basic_istream& seekg( off_type off, std::ios_base::seekdir dir ); | (2) |
Устанавливает индикатор позиции ввода текущего связанного объекта streambuf.
Прежде чем выполнять какие-либо действия, seekg сбрасывает eofbit.
seekg ведёт себя как Неформатированная функция ввода, за исключением того, что gcount() не затрагивается. После создания и проверки объекта sentry
fail() != true, устанавливает индикатор позиции ввода в абсолютное значение pos (относительно начала файла). В частности, выполняет rdbuf()->pubseekpos(pos, std::ios_base::in) (pubseekpos, в свою очередь, вызывает seekpos соответствующего буфера, например basic_filebuf::seekpos, basic_stringbuf::seekpos или strstreambuf::seekpos). В случае неудачи вызывает setstate(std::ios_base::failbit).fail() != true, устанавливает индикатор позиции ввода в позицию off относительно позиции, заданной dir. В частности, выполняет rdbuf()->pubseekoff(off, dir, std::ios_base::in). В случае неудачи вызывает setstate(std::ios_base::failbit).Параметры
| pos | - | абсолютная позиция, в которую следует установить индикатор позиции ввода | ||||||||
| off | - | относительная позиция (положительная или отрицательная), в которую следует установить индикатор позиции ввода | ||||||||
| dir | - | задаёт базовую позицию, относительно которой применяется смещение. Может принимать одно из следующих значений:
|
Возвращаемое значение
*this
Исключения
failure, если произошла ошибка (флаг состояния ошибки не равен goodbit) и для этого состояния установлено exceptions().
Если внутренняя операция выбрасывает исключение, оно перехватывается и устанавливается badbit. Если для badbit установлено exceptions(), исключение выбрасывается повторно.
Примечания
seekg(n) не обязательно эквивалентно seekg(n, ios::beg). std::basic_ifstream, например, требует, чтобы абсолютная позиция n была получена из tellg().
Пример
#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';
}
Вывод:
word1 = Hello, word2 = Hello,
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применён к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 129 | C++98 | не было способа указать на ошибку | при ошибке устанавливает failbit |
| LWG 136 | C++98 |
seekg мог устанавливать выходной поток | устанавливает только входной поток |
| LWG 537 | C++98 | тип off был off_type& | исправлено на off_type |
|
LWG 1328 (N3168) | C++98 |
seekg не сбрасывает eofbit | сбрасывает eofbit прежде чем выполнять какие-либо действия |
См. также
| возвращает индикатор позиции ввода (открытая функция-член) |
|
| возвращает индикатор позиции вывода (открытая функция-член std::basic_ostream<CharT,Traits>) |
|
| устанавливает индикатор позиции вывода (открытая функция-член std::basic_ostream<CharT,Traits>) |
|
вызывает seekpos() (открытая функция-член std::basic_streambuf<CharT,Traits>) |
|
|
[виртуальная] | перемещает файловую позицию, используя абсолютную адресацию (виртуальная защищённая функция-член std::basic_filebuf<CharT,Traits>) |
|
[виртуальная] | перемещает следующий указатель во входной последовательности, выходной последовательности или в обеих, используя абсолютную адресацию (виртуальная защищённая функция-член std::basic_stringbuf<CharT,Traits,Allocator>) |
|
[виртуальная] | перемещает следующий указатель во входной последовательности, выходной последовательности или в обеих, используя абсолютную адресацию (виртуальная защищённая функция-член std::strstreambuf) |
вызывает seekoff() (открытая функция-член std::basic_streambuf<CharT,Traits>) |
|
|
[виртуальная] | перемещает файловую позицию, используя относительную адресацию (виртуальная защищённая функция-член std::basic_filebuf<CharT,Traits>) |
|
[виртуальная] | перемещает следующий указатель во входной последовательности, выходной последовательности или в обеих, используя относительную адресацию (виртуальная защищённая функция-член std::basic_stringbuf<CharT,Traits,Allocator>) |
|
[виртуальная] | перемещает следующий указатель во входной последовательности, выходной последовательности или в обеих, используя относительную адресацию (виртуальная защищённая функция-член std::strstreambuf) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_istream/seekg