Problem mit fread
-
Hallo an alle!
Ich habe ein sehr seltsames Problem mit fread:Ich möchte eine Farbpalette laden (256 Farben, je RGB = 3x unsigned char), die Datei ist exakt 768 Bytes groß, jedoch liest fread aus irgendeinem Grund immer nur ein Teil der Datei (je nach Palettendatei - die alle 768 Bytes sind - unterschiedlich groß), den dafür aber korrekt.
Ich habe dann mal auf gut Glück mit feof getestet, ob stdio vielleicht glaubt, das Ende der Datei erreicht zu haben, und genau das tut es!
Ich weiß aber genau (ich seh's ja im Hex-Editor), dass die Datei wirklich 768 bytes groß ist und das Ende der Datei so früh noch gar nicht erreicht sein kann.
Ich hoffe jetzt einfach mal, es liegt an meinem Einlesecode:struct{Uint8 r,g,b;}RGB[256]; fread(RGB,768,1,F);F ist ein gültiger FILE*-Pointer und da ich SDL benutze, entspricht Uint8 auch wirklich einem unsigned char. Wie gesagt, der Teil, der gelesen wird, wird auch genau so gelesen, wie ich es mir vorstelle.
Ich habe es auch so probiert:struct{Uint8 r,g,b;}RGB[256]; Uint8 x; for(Sint32 i=0;i<256;i++){ fread(&x,1,1,F); RGB[i].r=x; fread(&x,1,1,F); RGB[i].g=x; fread(&x,1,1,F); RGB[i].b=x; }Hier habe ich genau dasselbe Problem.
Ich benutze übrigens Dev-C++ 4.9.9.2, falls das irgendwie hilft (ja, ist eine Beta-Version, aber warum sollte fread da versagen?).
Ich hoffe jemand kann mir da helfen,
vielen Dank im Voraus!
-
Erstens: Wenn du in C++ arbeitest, solltest du auch fstreams dafür verwenden - die FILE* Funktionen gibt's zwar noch, aber nur für Ausnahmefälle.
Zweitens: Wie hast du denn die Datei geöffnet? (lass mich raten - im Textmodus fopen(...,"r"))
-
<.<
Nagut, das ist jetzt ein wenig peinlich...
Ich habe tatsächlich das "b" für "rb" vergessen.
OK, es läuft jetzt super.Das Öffnen findet woanders statt als das Lesen, sodass ich daran nicht mehr wirklich gedacht habe (machte ich sonst ja auch richtig).
Danke für den "Tipp"!
