讀檔案時輸入流ifstream中函式tellg()與seekg()的詳解與示例
阿新 • • 發佈:2019-02-19
讀取檔案時有時會需要回退
比如讀完第n行想回退到第n-1行再讀一次n行
或者讀字元時想回退到n個字元之前
比如讀完第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/