Announcement

Collapse
No announcement yet.

Unplausibles setzen des Filepointers beim Lesen mit read

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Unplausibles setzen des Filepointers beim Lesen mit read

    Habe folgendes Problem:

    Ich lese ein File ein, das in einer Blockstruktur organisiert ist.
    D.h der Einstiegspunkt ist bei Byte 0, dann erhalte ich die Information an welcher Stelle der nächste "Datenblock" beginnt. Da setze ich dann den Filpepointer mit

    <PRE>
    ifstream& CMdf::readIDBlock(ifstream& ifs)//das ist meine Funktion zum Lesen des IDBlocks
    {
    ifs.seekg(IDBlockPostion,ios_base::beg);//setzen fp
    ifs.read ((char*) &IDBlock.FileIdentifier, sizeof(IDBlock.FileIdentifier));//lesen von 2 Bytes
    ifs.read ((char*) &IDBlock.FormatIdentifier, sizeof(IDBlock.FormatIdentifier)); //Lesen von 2 Bytes

    </PRE>

    soweit so gut, beim Lesen eines ähnlichen Blocks an andere Stelle im File passiert nun folgendes:

    Die Information über den Blockidentifier bekomme ich noch ohne Probleme.

    <PRE> ifs.read ((char*) &CGBlock.BlockIdentifier, sizeof(CGBlock.BlockIdentifier));</PRE>

    Theoretisch sollte der Filepointer jetzt einfach 2 Bytes weiter stehen, da der BlockIdentifier als char[2] deklariert wurde, und dort die nächste Info lesen.

    Tatsächlich steht er aber 512Bytes weiter !!

    Das HEX-Dump im File an der respektiven Stelle sieht so aus:

    43 47 1A 00

    Zu Beginn steht der Pointer auch auf den 43 und liest auch 43 und 47 ein.
    Doch dann geht etwas schief.

    Der Pointer zeigt folgendes Verhalten:

    Der Filepointer VOR read: 0x000106D3<BR>
    Filpointer NACH read soll: 0x000106D5<BR>
    Filepointer NACH read ist: 0x000116d3<BR>

    Ich bin NICHT am Ende des Files oder ähnliches !

    Warum springt der Filepointer da soweit weg ?
    Liegt das an den Daten die 1A 00 ? Die will ich als unsigned short einlesen, was an allen anderen Blöcken funktioniert.

    Kann mir das bitte bitte jemand erklären ?
    Was mache ich falsch ?

    Danke

    Marcus
Working...
X