fread / ftell anscheinend unter Windows kaputt, funktioniert gut unter Linux

7

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.

    
Ivo Wetzel 06.07.2010, 15:27
quelle

3 Antworten

20

Öffnen Sie Ihre Datei im Binärmodus:

%Vor%

Im Textmodus könnte es Übersetzungen geben, die mit der Betriebssystem-abhängigen Codierung von z.B. Zeilenvorschübe zu den C-Bibliotheken.

    
unwind 06.07.2010, 15:30
quelle
4

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.

    
Charles Bailey 06.07.2010 15:31
quelle
0

Sie sollten ftell und fseek nicht verwenden, um die Größe einer Datei zu bestimmen, da sie die Quelle von vunnerabilities sein könnte:

Ссылка

    
Joakim 01.07.2014 09:02
quelle

Tags und Links