命名空间
变体
操作

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

来自 cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
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() 不会受到影响。在构造和检查哨兵对象后,

1) 如果 fail() != true,则将输入位置指示器设置为绝对(相对于文件开头)值 pos。具体来说,会执行 rdbuf()->pubseekpos(pos, std::ios_base::in) (pubseekpos,反过来,会调用特定缓冲区的 seekpos,例如 basic_filebuf::seekposbasic_stringbuf::seekposstrstreambuf::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 如果发生错误(错误状态标志不是 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> 的公共成员函数) [编辑]
[虚拟]
使用绝对寻址重新定位文件位置
(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 的虚拟受保护成员函数) [编辑]