Я изменяю процедуру чтения для двоичные данные. К сожалению, я не так уж сильна в 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
измеряется в (байты, символы, целые числа?).
Версия seekg()
принимая whence
аргумент принимает std::streamoff
в качестве аргумента. Это может быть отрицательным. Нет необходимости делить на sizeof(char)
как sizeof(char)
определяется как 1
, Поскольку потоки aleays работают с символами, единицы измерения, используемые потоками, являются символами, то есть типом первого аргумента шаблона потока.
Других решений пока нет …