我正在研究一些使用 win32WriteFile()
写入二进制文件中的随机位置的遗留代码。写入的偏移量可以超过文件的末尾,在这种情况下,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 到 soffset
吗?