在C++文件流中,seekg()函數(shù)用于將文件指針移動(dòng)到指定位置。它的原型如下:
istream& seekg(streampos pos);
istream& seekg(streamoff off, seekdir way);
第一個(gè)原型將文件指針移動(dòng)到指定的絕對(duì)位置pos,streampos是一個(gè)類型,表示文件流的位置。
第二個(gè)原型將文件指針移動(dòng)到離當(dāng)前位置off個(gè)字節(jié)的位置,way參數(shù)指定了移動(dòng)的方向,它可以取以下值:
ios::beg:從文件開(kāi)頭偏移off個(gè)字節(jié);
ios::cur:從當(dāng)前位置偏移off個(gè)字節(jié);
ios::end:從文件末尾偏移off個(gè)字節(jié)。
seekg()函數(shù)返回一個(gè)istream類型的引用,在進(jìn)行文件操作時(shí),可以使用該引用來(lái)檢測(cè)是否發(fā)生了錯(cuò)誤。
下面是一個(gè)示例代碼,演示了使用seekg()函數(shù)將文件指針移動(dòng)到文件開(kāi)頭和文件末尾的用法:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream file("test.txt");
if (!file) {
cout << "Error opening file." << endl;
return 1;
}
// 獲取文件大小
file.seekg(0, ios::end);
int filesize = file.tellg();
cout << "File size: " << filesize << " bytes" << endl;
// 將文件指針移動(dòng)到文件開(kāi)頭
file.seekg(0, ios::beg);
char ch;
file.get(ch);
cout << "First character: " << ch << endl;
// 將文件指針移動(dòng)到文件末尾
file.seekg(0, ios::end);
file.get(ch);
cout << "Last character: " << ch << endl;
file.close();
return 0;
}
在這個(gè)示例中,首先打開(kāi)了一個(gè)名為test.txt的文件,并檢查文件是否成功打開(kāi),如果打開(kāi)失敗,就輸出錯(cuò)誤信息并返回。
接下來(lái),使用seekg()函數(shù)將文件指針移動(dòng)到文件末尾,并使用tellg()函數(shù)獲取文件指針的位置,即文件大小。
然后,將文件指針移動(dòng)到文件開(kāi)頭,并讀取第一個(gè)字符。最后,將文件指針移動(dòng)到文件末尾,并讀取最后一個(gè)字符。
最后,關(guān)閉文件并返回。
注意,在使用seekg()函數(shù)之前,要先打開(kāi)文件,并進(jìn)行錯(cuò)誤檢查。另外,文件流的位置是從零開(kāi)始計(jì)數(shù)的。