すでにいくつかのデータ (8 kB など) を含むファイルがあります。ファイルの先頭から何かを読み込んで、読み終わったところからデータを上書きしたい。だから私は次のコードを使用しようとします:
std::fstream stream("filename", std::ios::in | std::ios::out | std::ios::binary);
char byte;
stream.read(&byte, 1);
// stream.seekp(1);
int bytesCount = 4096;
auto bytesVec = std::vector<char>(bytesCount, 'c');
char* bytes = bytesVec.data();
std::cout << stream.bad() << std::endl;
stream.write(bytes, bytesCount);
std::cout << stream.bad() << std::endl;
このコードを実行すると、最初は がbad()
返されますfalse
が、2 番目は返さtrue
れ、実際には何も書き込まれません。
bytesCount
4096 (おそらく内部バッファーのサイズ) よりも小さい値に減少すると、2 番目は をbad()
返しますfalse
が、それでも何も書き込まれません。
行のコメントを外すseekp()
と、書き込みが開始されます。bad()
戻りfalse
、バイトが実際に書き込まれます。
なぜseekp()
ここで必要なのですか?それがないと機能しないのはなぜですか?seekp()
これを行う正しい方法はありますか?
Windows 7 で Visual Studio 2012 を使用しています。