Vorzeitiges EOF
lima-city → Forum → Programmiersprachen → C/C++ und D
beobachten
code
compiler
dank
datei
ergebnis
erzeugen
file
flag
konvertieren
puzzleteil
sektor
studium
system
tippfehler
vorgabe
wechsel
windows
zeichen
zuviel
-
Hallo zusammen,
es ist passiert. Zum ersten mal in meinem Leben komm ich von alleine nicht mehr Vorwärts mit einem Programm.
Also um was geht es:
Ich habe bei meinem Studium eine Hausaufgabe bekommen, bei der ich eine Datei in eine andere konvertieren soll.
Genauer gesagt soll eine Datei, die Bilddaten in gleichgroße Puzzleteile aufgespalten enthält umgewandelt werden in eine normale TGA oder BMP Datei. Das ganze umzusetzen war nicht sonderlich schwer. Binnen 3h hatte ich den Code lauffähig unter Linux.
Leider ist die Vorgabe aber, dass der Code Plattformunabhängig ist und auf Windows laufen soll.
Zuerst dachte ich dies sei kein Problem, da ich nicht Plattformspezifisch gearbeitet habe und auch brav die / in \ umgewandelt habe unter Windoof.
Jetzt das eigentliche Problem:
Derselbe Code und dieselbe Eingabedatei unter Linux und Windows erzeugen verschiedene Ausgaben.
Nach längerem Debugging unter Windows habe ich festgestellt, dass schon nach 24k gelesenen Bytes die Fnktionen feof(file) bzw file.eof() true zurückliefern obwohl die Datei 200k Bytes hat.
Wie schon angedeutet, habe ich sowohl C Style als auch die C++ Filestreams probiert mit demselben Ergebnis.
Google war leider nicht ergiebig, da alles was ich zu dem Thema gesucht habe immer darauf hinauslief, dass das echte Dateiende früher kam als irgendein Parser erwartet hat.
Ich hoffe hier kann mir jemand helfen.
Danke schonmal,
Sektor
[Edit]
Als Compiler benutze ich unter Windows g++ über MinGW
Beitrag zuletzt geändert: 6.11.2010 10:57:35 von sektor -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das ist recht einfach. EOF ist verschieden definiert. Er hört unter Windows bei 0x1A auf zu lesen. Wenn dieses Zeichen im Stream vorkommt, was bei Binär-Dateien häufiger der Fall ist, endet für ihn der Stream dort. Versuche die Datei Binär zu öffnen. Ansonsten: Poste bitte einen Code ;) ( Wenn bis dahin keiner eine bessere Idee hat )
Beitrag zuletzt geändert: 6.11.2010 11:01:06 von geekgirl -
Danke das wars schon.
Ich bin nicht nochmal auf die Idee gekommen dort nachzuschauen^^
Hatte im Code stehen:
std::ifstream file(name.c_str(), std::ifstream::in || std::ifstream::binary)
statt
std::ifstream file(name.c_str(), std::ifstream::in | std::ifstream::binary)
Irgendwie ist mir da ein | zuviel reingerutscht und ich habs nicht gemerkt.
Dadurch waren irgendwelche merkwürdigen Flags gesetzt ^^
Vielen Dank
[Edit]
mal wieder Tippfehler ^^
PS: Es ist immer wieder interessant die Effekte zu beobachten, die beim wechseln zwischen den Systemen entstehen.
Ich habe sowohl unter Linux als auch unter Windows mit g++ gearbeitet. Nach jedem Wechsel hatte ich eine Menge Fehler, die auf dem anderen System nicht auftraten.
Z.B. scheint unter Windows das std:: nicht zwingend zu sein, unter Linux schon.
Desweiteren hat Linux die Dateien standardmäßig als Binärdateien gelesen während Windows rumgezickt hat.
Beitrag zuletzt geändert: 6.11.2010 22:56:13 von sektor -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage