У меня есть файл, который уже содержит некоторые данные (скажем, 8 кБ). Я хочу что-то прочитать с начала файла, а затем перезаписать данные, начиная с того места, где я закончил чтение. Поэтому я пытаюсь использовать следующий код:
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
, а второй возвращает true
, и ничего не записывается.
Если я уменьшу bytesCount
до значения меньше 4096 (предположительно, размера некоторого внутреннего буфера), второй bad()
возвращает false
, но все равно ничего не записывается.
Если я раскомментирую строку seekp()
, запись начнет работать: bad()
возвращает false
, и байты фактически записываются.
Почему здесь нужен seekp()
? Почему он не работает без него? Правильно ли это seekp()
?
Я использую Visual Studio 2012 для Windows 7.