Also hier ist das Problem, ich lese eine Level-Datei für mein Spiel, funktioniert gut unter Linux:
%Vor%Aber unter Windows bekomme ich folgendes Ergebnis:
%Vor%Äh? Die Fenster ftell Statistik mit einem Offset von 200? Das Lesen der Datei ergibt offensichtlich die gleichen Daten, aber fread verwendet (?) Den Wert von ftell, um zu bestimmen, wie viele Bytes in der Datei verbleiben, die gelesen werden können. Natürlich stoße ich beim Lesen am Ende der Datei auf Probleme:
%Vor%Dies ist der entsprechende Code (momentan ein bisschen hässlich wegen all der Debug-Drucke ..):
%Vor%Ich habe wirklich keine Ahnung, was hier vor sich geht. Compiler sind das Visual Studio 10 one und GCC 4.4 unter Linux.
ftell
und fseek
funktionieren nur als Byte-Offsets, wenn Sie die Datei im Binärmodus öffnen (d. h. "rb"
anstelle von "r"
). Ansonsten kannst du fseek
nur auf Dinge anwenden, die zuvor von ftell
; Das Ergebnis von fseek
wird kein Byte-Offset sein.
Der Binärmodus macht einen Unterschied bei Fenstern, bei denen der Textmodus die Zeilenvorschub-Zeilenvorschubsequenz mit zwei Zeichen auf ein einzelnes Zeichen mit neuer Zeile abbildet. Unter Linux ist kein Mapping erforderlich.