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. (с C++11)

seekg ведет себя как UnformattedInputFunction, за исключением того, что 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 устанавливается. Если 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

См. также

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

Spec-Zone.ru

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