ok, so I just tried replacing the seek call from:
file.Seek( -(dwRead - i) , CFile::current);
to:
int move = -(dwRead - i);
file.Seek( move , CFile::current);
and it now works.. why is this so?
Nick
"Nick Schultz" <nick.schultz@flir.com> wrote in message
news:OdLnyirEJHA.4420@TK2MSFTNGP06.phx.gbl...
I am having trouble trying to execute multiple Read calls on a CFile.
I can execute the first Read fine, reading in BUFFER_LENGTH bits...
I then loop through the data, reading and handling different data types
(In my example below, I only showed one case but other types are
similar), I just use one byte to distinquish between different types.
After finding out the type, I check to make sure that the entire
structure made it in the buffer, if not I then try to reposition the file
pointer by dwRead-i, such that the first byte read in is the same type
identifier and I can resume reading the entire type.
I thought this should work, however on the second Read, dwRead = 0,
meaning no bytes were read.
What did I do wrong?
Here is the code:
Cfile file;
file.Open(...);
while((dwRead = file.Read(buffer, BUFFER_LENGTH)) > 0){
bool refill;
for(int i = 0 ; i < dwRead;i++)
{
//first make sure there was enough room to read next byte (size
byte)
if(i == (dwRead -1)){
//the type identifier was the last byte, reposition -1 and get
another chunk
file.Seek( -(dwRead - i) , CFile::current);
break;
}
refill = false;
switch(buffer[i])
{
case DATAPT:
if( (i + sizeof(DataPt) ) >= dwRead-1){
file.Seek( -(dwRead - i) , CFile::current);
refill = true;
}
else{
handleDataPt((DataPt*) &buffer[i+1]);
i += sizeof(DataPt);//advance i past size of DataPt to
next type Identifier
}
break;
}
if(refill)
break;
}
if(refill && dwRead != BUFFER_LENGTH)
break;//requested to refill, however it was end of
file...corrupted data
}
file.Close();
Thanks,
Nick