WriteFile()
win32を使用してバイナリ ファイルのランダムな場所に書き込むレガシー コードに取り組んでいます。書き込みのオフセットは、ファイルの末尾を超える可能性があります。その場合WriteFile()
、ファイル サイズがオフセットまで自動的に拡張され、データがファイルに書き込まれます。
同じことをしたいstd::fstream
のですが、適切な場所に移動しようとするseekp()
と、ファイルの終わりを過ぎてseekp()
失敗し、その後write()
も失敗します。
そのため、現在の EOF と書き込みたい場所の間のスペースを「手動で」埋める必要があるように思えます。
コードは次のようになります。
void Save(size_t offset, const Element& element)
{
m_File.seekp(offset, std::ios_base::beg);
m_File.write(reinterpret_cast<const char*>(&element), sizeof(Element));
if (m_File.fail()) {
// ... error handling
}
}
0
では、現在の EOF から まで sを「手動で」書き込む唯一のオプションはありますoffset
か?