Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Seltsames fread-problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.01.2004, 11:11 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Ich habe eine knapp 75MB große datei, welche ich immer "stückchenweise" einlese. D.h ich setze mit fseek an eine bestimmte position und lese dann 196 Bytes ein. Nur funktioniert das seltsamerweiße an bestimmten stellen der datei nicht (z.b bei rund 9MB, 26MB, 73MB). An diesen Stellen gibt fread immer 0 zurück, obwohl size und count ungleich 0 sind. ferror gibt nichts (0) zurück. feof ebenfalls 0.

Woran könnte das liegen:


C++:
    FILE *Map0Mul = fopen("c:\\test","r");
    if(!Map0Mul)
      return NULL;
    
    UINT iCB = ...;

    BYTE header[4] = {0,0,0,0};
    BYTE tileid[2] = {0,0};
    BYTE altitude = 0;

    fseek(Map0Mul,(iCB * 196),SEEK_SET);
    fread(&header,sizeof(BYTE),4,Map0Mul); // == 0

    MyBlock->header = *((int*)&header);

    for(int x = 0; x < 64; x++)
    {
      fread(&tileid,sizeof(BYTE),2,Map0Mul); // == 0
      MyBlock->cells[x].TileID = *((short*)&tileid);
      fread(&altitude,sizeof(BYTE),1,Map0Mul); // == 0
      MyBlock->cells[x].Z = *((char*)&altitude);
    }



Ich versteh das einfach nicht ...
--
class God : public ChuckNorris { };

Dieser Post wurde am 02.01.2004 um 11:12 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.01.2004, 11:46 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Achja, wenn ich datei zu beginn komplett einlese, funktioniert es, das ist dann leider nur inperformant (75MB buffer anlegen und dann einlesen dauert bei mir 10s in denen das Programm scheinbar hängt)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.01.2004, 12:15 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


wenn ich mich nicht irre sind header und tileid schon pointer also kein & verwenden...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.01.2004, 13:18 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


daran liegts nicht, hab beides ausprobiert, es gehen ja nur bestimmte stellen in der datei nicht, das ist es was ich so seltsam finde.

Im Moment mach ichs nun mit komplett einlesen, ohne debugger geht das auch ganz flott. (kostet nur immens arbeitsspeicher, aber das ist mir dann auch wurscht )
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.01.2004, 13:31 Uhr
virtual
Sexiest Bit alive
(Operator)


Hast Du den richtigen Source gepostet? - Sehe kein fseek, was zu deiner Fehlerbeschreibung passen würde...
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.01.2004, 14:36 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


an bestimmten positionen, also z.b wenn

iCB*196 = 9143834

dann geben alle fread aufrufe für header und den zellen alle 0 zurück und es wird nix eingelesen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: