Я работаю над устаревшим кодом, который использует win32 WriteFile()
для записи в случайное место в двоичном файле. Смещение записи может быть после конца файла, в этом случае 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 до offset
?