C ++ Fstream Peek вызывает сбой записи - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть код для Windows, который открывает файл как объект fstream, используя ios::in|ios::out|ios::binary. Я пытаюсь peek 1 байт, изменить его и записать обратно в файл в той же позиции. Это соответствующий код (примечание: _SH_DENYWR - это общий ресурс Windows, поэтому я могу записать в файл, но другие процессы не могут):

this->m_File.open(filename, ios::in | ios::out | ios::binary, _SH_DENYWR);

...

// Using peek here causes all subsequent writes to fail
// even though peek returns the correct value and is not 
// peeking at the EOF
BYTE byte = this->m_File.peek();
BYTE high = binPattern[0].High;
BYTE low = binPattern[0].Low;
BYTE finalByte = byte;

if (high != this->WILDCARD && (byte >> 4) != high)
    finalByte = (finalByte & 0x0f) | (high << 4);

if (low != this->WILDCARD && (byte & 0x0f) != low)
    finalByte = (finalByte & 0xf0) | low;

this->m_File.write((char*)&finalByte, sizeof(BYTE));

// This seekp resets something in the stream and allows the next write to succeed
this->m_File.seekp(this->MAGIC_OFFSET, ios::beg);
this->m_File.write((char*)&this->PATCH_MAGIC, sizeof(DWORD));

...

Что я делаю неправильно с peek и write

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...