比如讀完第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/