讀文件時輸入流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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章