После прочтения с fstream, как вернуть курсор в положение предварительного чтения?

Я изменяю процедуру чтения для двоичные данные. К сожалению, я не так уж сильна в C ++, на языке, на котором написана подпрограмма. Подпрограмма начинает читать некоторые данные. После этого я хочу это посмотрите на буферизованное значение который я также прочитал из файла. В зависимости от стоимости код должен либо что-то делать и потом продолжать нормально или же отменить чтение буфера и продолжай нормально.

Моя проблема — отмена или возврат позиции курсора, если хотите. Раздетый код выглядит примерно так:

int buffer;

std::fstream inputFile;
inputFile.open( "Filename", std::ios::in | std::ios::binary );

... // read some data from inputFile

// read buffer value
inputFile.read( reinterpret_cast<char *>(&buffer), sizeof(buffer) );

if( buffer == 256 ) {
... // do something here
} else
// make it so nothing (including reading the buffer earlier) happened
inputFile.seekg( -1*sizeof(buffer), std::ios::cur ); // <---- is this right?
// or do I need to do it this way?
inputFile.seekg( -1*sizeof(buffer)/sizeof(char), std::ios:cur );
}

Я предполагаю, что могу использовать отрицательные значения в seekg() поскольку я нахожу int только логическим и не читал ничего наоборот. Какой путь выше верен? Или в принципе я спрашиваю что значит seekg() на самом деле ожидать в качестве первого аргумента?

C ++ Reference только говорит это:

IStream seekg (выходной поток выключен, путь ios_base :: seekdir);
от
Значение смещения относительно параметра пути.
streamoff - это тип смещения (обычно это целочисленный тип со знаком).
путь
Объект типа ios_base :: seekdir. Может принимать любое из следующих постоянных значений:
Смещение значения относительно ...
ios_base :: начало потока
ios_base :: cur текущая позиция в потоке
ios_base :: конец конца потока

Который не говорит мне блок off измеряется в (байты, символы, целые числа?).

1

Решение

Версия seekg() принимая whence аргумент принимает std::streamoff в качестве аргумента. Это может быть отрицательным. Нет необходимости делить на sizeof(char) как sizeof(char) определяется как 1, Поскольку потоки aleays работают с символами, единицы измерения, используемые потоками, являются символами, то есть типом первого аргумента шаблона потока.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]