Namespaces
Variants

std::basic_istream<CharT,Traits>:: seekg

From cppreference.net
basic_istream & seekg ( pos_type pos ) ;
(1)
basic_istream & seekg ( off_type off, std:: ios_base :: seekdir dir ) ;
(2)

设置当前关联的 streambuf 对象的输入位置指示器。

在执行任何其他操作之前, seekg 会清除 eofbit (since C++11)

seekg 的行为类似于 非格式化输入函数 ,但不会影响 gcount() 。在构造并检查哨兵对象后,

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 ,将输入位置指示器设置为相对于 dir 所定义位置的 off 偏移量。具体而言,执行 rdbuf ( ) - > pubseekoff ( off, dir, std:: ios_base :: in ) 。若操作失败,则调用 setstate ( std:: ios_base :: failbit )

目录

参数

pos - 设置输入位置指示器的绝对位置
off - 设置输入位置指示器的相对位置(正值或负值)
dir - 定义应用相对偏移的基准位置。可以是以下常量之一:
常量 说明
beg 流的起始位置
end 流的结束位置
cur 流位置指示器的当前位置

返回值

* this

异常

failure if an error occurred (the error state flag is not goodbit ) and exceptions() is set to throw for that state.

如果内部操作抛出异常,该异常会被捕获并设置 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++标准。

缺陷报告 适用标准 发布时行为 正确行为
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 的虚受保护成员函数)