Will nicht weiterlesen

27/07/2012 - 19:39 von Burkhard Schultheis | Report spam
Ich habe hier ein ganz komisches Problem, das mich derzeit fast
verzweifeln làsst. Unter Linux kein Problem, unter Windows aber schon:

Es sollte auf einen Rutsch eine komplette Datei eingelesen werden. Dazu
wurde mit fread alles in einen Puffer eingelesen. Ich musste dann
feststellen, dass im Gegensatz zu Linux die Datei nicht komplett
eingelesen wurde, sondern nur exakt 261040 statt 282260 Zeichen. Ich
habe dann die folgende Schleife programmiert, um die Datei komplett
einzulesen:

for (gelesen = 0;
gelesen < file_size;
gelesen += anz)
{
anz = (int) fread (&buf [gelesen], 1, file_size - gelesen, file);
}

Dabei sind gelesen, anz und file_size natürlich Integerwerte. Aber es
werden immer nur 261040 Bytes beim ersten Mal gelesen, dann werden in
jedem Durchgang keine Bytes mehr gelesen.

Ich habe jetzt gerade gedacht, es könne etwas damit zu tun haben, wie
die Datei geöffnet wird, weil die Größe der entsprechenden Linux-Datei
in etwa 261000 Bytes ist. Aber wenn einen Datei mit fopen im Modus "r"
geöffnet wird, muss sie sich doch wie beschrieben verarbeiten lassen,
oder mache ich da einen Denkfehler? Im Puffer sehe ich auch lauter 0D0A,
also müsste doch bis zum Ende gelesen werden!

Was ist da falsch?

Übersetzt wird das ganze immer noch mit VS 6! :-(

Grüße
Burkhard
 

Lesen sie die antworten

#1 Heiko Rost
27/07/2012 - 19:53 | Warnen spam
Am Fri, 27 Jul 2012 19:39:07 +0200 schrieb Burkhard Schultheis:

Es sollte auf einen Rutsch eine komplette Datei eingelesen werden. Dazu
wurde mit fread alles in einen Puffer eingelesen. Ich musste dann
feststellen, dass im Gegensatz zu Linux die Datei nicht komplett
eingelesen wurde, sondern nur exakt 261040 statt 282260 Zeichen.
...
Aber wenn einen Datei mit fopen im Modus "r"
geöffnet wird, muss sie sich doch wie beschrieben verarbeiten lassen,
oder mache ich da einen Denkfehler?



Schuß ins Blaue: Die Datei wird mit "r" im Textmode geöffnet und an
Position 261040 steht ein ^z, das als EOF interpretiert wird. Du
solltest "rb" für den Modus probieren.

Gruß Heiko

Ähnliche fragen