Spec-Zone.ru › C++

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

1) если 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).
2) если fail() != true, устанавливает индикатор позиции ввода в позицию off относительно позиции, заданной dir. В частности, выполняет rdbuf()->pubseekoff(off, dir, std::ios_base::in). В случае неудачи вызывает setstate(std::ios_base::failbit).

Параметры

pos - абсолютная позиция, в которую следует установить индикатор позиции ввода
off - относительная позиция (положительная или отрицательная), в которую следует установить индикатор позиции ввода
dir - задаёт базовую позицию, относительно которой применяется смещение. Может принимать одно из следующих значений:
Константа Описание
beg начало потока
end конец потока
cur текущая позиция индикатора позиции потока

Возвращаемое значение

*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 прежде чем выполнять какие-либо действия

См. также

tellg
возвращает индикатор позиции ввода
(открытая функция-член)
tellp
возвращает индикатор позиции вывода
(открытая функция-член std::basic_ostream<CharT,Traits>)
seekp
устанавливает индикатор позиции вывода
(открытая функция-член std::basic_ostream<CharT,Traits>)
pubseekpos
вызывает seekpos()
(открытая функция-член std::basic_streambuf<CharT,Traits>)
seekpos
[виртуальная]
перемещает файловую позицию, используя абсолютную адресацию
(виртуальная защищённая функция-член std::basic_filebuf<CharT,Traits>)
seekpos
[виртуальная]
перемещает следующий указатель во входной последовательности, выходной последовательности или в обеих, используя абсолютную адресацию
(виртуальная защищённая функция-член std::basic_stringbuf<CharT,Traits,Allocator>)
seekpos
[виртуальная]
перемещает следующий указатель во входной последовательности, выходной последовательности или в обеих, используя абсолютную адресацию
(виртуальная защищённая функция-член std::strstreambuf)
pubseekoff
вызывает seekoff()
(открытая функция-член std::basic_streambuf<CharT,Traits>)
seekoff
[виртуальная]
перемещает файловую позицию, используя относительную адресацию
(виртуальная защищённая функция-член std::basic_filebuf<CharT,Traits>)
seekoff
[виртуальная]
перемещает следующий указатель во входной последовательности, выходной последовательности или в обеих, используя относительную адресацию
(виртуальная защищённая функция-член std::basic_stringbuf<CharT,Traits,Allocator>)
seekoff
[виртуальная]
перемещает следующий указатель во входной последовательности, выходной последовательности или в обеих, используя относительную адресацию
(виртуальная защищённая функция-член std::strstreambuf)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_istream/seekg

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API