读文件时输入流ifstream中函数tellg()与seekg()的详解与示例

来源:互联网 发布:网络推广文案典型案例 编辑:程序博客网 时间:2024/06/04 19:45
读取文件时有时会需要回退
比如读完第n行想回退到第n-1行再读一次n行
或者读字符时想回退到n个字符之前

都可以使用tellg()和seekg()


tellg() 用于在输入流中获取位置

seekg()用于设置在输入流中的位置

其实本质上文件读写就是一个指针指向文件中某个位置后进行读写,所以简单来说tellg()和seekg()都是用于设置该指针的位置的。

//tellg()定义:streampos tellg();//返回一个整型数,代表读指针的位置//example:streampos pos = tellg();//将tellg()返回的指针位置赋值给pos
//seekg()定义:istream& seekg (streampos pos);//将读指针设置到pos位置istream& seekg (streamoff off, ios_base::seekdir way);//将读指针设置为way+off,其中off 代表偏移值,而way代表基址


来个示例:

int main(){ifstream in("in.txt");string line;streampos pos = tellg();//记录当前指针位置int i = 10;while (i--) {//读到第11行之前getline(in, line);}in.seekg(pos);//将指针指回第1行,可以重新读一次return 0;}


reference:

http://www.cplusplus.com/reference/istream/istream/tellg/

http://www.cplusplus.com/reference/istream/istream/seekg/

原创粉丝点击