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

读取文件时有时会需要回退
比如读完第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/

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值