ファイルに書き込んでいるときにどのようseekg()
に動作するかについて、いくつかの明確化を探しています。seekp()
たとえば、次のようなファイルがあったとします。
offset 0: 2
offset 4: 4
offset 8: 6
offset 12: 8
offset 16: 10
ここで、ファイルを開いて、値の読み取りと書き込みをシークしたいと考えています。
fstream file;
file.open("file.txt", fstream::in |fstream::out | fstream::binary);
file.seekp(0, ios::end) // seek to the end of the file
int eofOffset = file.tellp(); // store the offset of the end-of-file, in this case 20
int key = 0;
file.seekg(12, ios::beg); // set the seek cursor to offset 12 from the beginning of the file
file.read((char *) &key, (int)sizeof(int)); // read in the next 4 bytes and assign it to key, in this case 8
file.seekg(8, ios::beg); // set the seek cursor to offset 8 from the beginning of the file
file.read((char *) &key, (int)sizeof(int)); // read in the next 4 bytes and assign it to key, in this case 6
ここで、ファイルの最後に書き込みたいと思います。seekg()
関数はシーク カーソルを移動するだけなので、seekp()
カーソルはファイルの最後にあるはずですよね? そう:
int newKey = 12;
file.write((char *) &newKey, sizeof(int));
私のファイルは次のようになります:
offset 0: 2
offset 4: 4
offset 8: 6
offset 12: 8
offset 16: 10
offset 20: 12
オフセットをシークし、その値を挿入したばかりの値へのオフセットとして書き込むことを選択した場合、ファイルはどうなりますか。たとえば、そのオフセットに 12 を挿入したのでoffset 8
保持したいと思います。eofOffset = 20
私が行った場合:
file.seekp(8, ios::beg);
file.write((char *) &eofOffset, sizeof(int));
私のファイルを次のように正しく書き換えますか?
offset 0: 2
offset 4: 4
offset 8: 20
offset 12: 8
offset 16: 10
offset 20: 12
seekg()
およびseekp()
関数を使用してエラーが発生した場合はお知らせください。