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. | (с C++11) |
seekg ведет себя как UnformattedInputFunction, за исключением того, что 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 устанавливается. Если exceptions() установлено для badbit, исключение перебрасывается.
Примечания
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 |
См. также
| возвращает указатель позиции входного потока (общедоступный член-функция) |
|
| возвращает указатель позиции выходного потока (общедоступный член-функция std::basic_ostream<CharT,Traits>) |
|
| устанавливает указатель позиции выходного потока (общедоступный член-функция std::basic_ostream<CharT,Traits>) |
|
вызывает seekpos() (общедоступный член-функция std::basic_streambuf<CharT,Traits>) |
|
|
[virtual] | перемещает позицию файла, используя абсолютное адресование (виртуальная защищенная член-функция std::basic_filebuf<CharT,Traits>) |
|
[virtual] | перемещает указатель следующего элемента в последовательности ввода, вывода или обоих, используя абсолютное адресование (виртуальная защищенная член-функция std::basic_stringbuf<CharT,Traits,Allocator>) |
|
[virtual] | перемещает указатель следующего элемента в последовательности ввода, вывода или обоих, используя абсолютное адресование (виртуальная защищенная член-функция std::strstreambuf) |
вызывает seekoff() (общедоступный член-функция std::basic_streambuf<CharT,Traits>) |
|
|
[virtual] | перемещает позицию файла, используя относительное адресование (виртуальная защищенная член-функция std::basic_filebuf<CharT,Traits>) |
|
[virtual] | перемещает указатель следующего элемента в последовательности ввода, вывода или обоих, используя относительное адресование (виртуальная защищенная член-функция std::basic_stringbuf<CharT,Traits,Allocator>) |
|
[virtual] | перемещает указатель следующего элемента в последовательности ввода, вывода или обоих, используя относительное адресование (виртуальная защищенная член-функция 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