1. 程式人生 > >讀檔案時輸入流ifstream中函式tellg()與seekg()的詳解與示例

讀檔案時輸入流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/