C++ の seekp() 関数と seekg() 関数の使い方は?
C++では、seekp()とseekg()関数はファイルポインタの位置を設定するために使われます。
`seekp()` 関数は書き込みポインタの位置を設定します。これは、ファイル内の特定の位置にポインタを移動して書き込み操作を行うために使用されます。2 つのパラメータを持ちます。最初の位置は移動するオフセット(バイト単位)で、2 番目のパラメータはポインタ位置の基準位置です。基準位置は `ios::beg`(ファイルの先頭)、`ios::cur`(現在位置)、`ios::end`(ファイルの最後)にすることができます。コード例を次に示します。
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream file("test.txt", ios::out | ios::binary);
if (!file) {
cout << "Error in creating file!" << endl;
return 0;
}
// 移动写指针到文件末尾
file.seekp(0, ios::end);
// 写入数据
file << "Hello, World!" << endl;
file.close();
return 0;
}
seekg() 関数は読み込みポインタの位置を設定します。つまり、ファイル内の特定の位置にポインタを移動して読み取り操作を実行します。使用方法は seekp() 関数に似ています。コードの例を以下に示します。
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream file("test.txt", ios::in | ios::binary);
if (!file) {
cout << "Error in opening file!" << endl;
return 0;
}
// 移动读指针到文件开头
file.seekg(0, ios::beg);
// 读取数据
string line;
getline(file, line);
cout << line << endl;
file.close();
return 0;
}
seekp()、seekg()関数は、ファイルストリームを開くことと、開くモードをios::in(入力モード)またはios::out(出力モード)に設定することを確認した後、使用してください。