fread und Dateizeiger
-
ach das war ein bischen aus dem kontext gerissen, also das bezieht sich auf den rückgabe wert von ftell() also solltest du fseek(3638) aufrufen, würdest du dich wieder an byte 54 || 55 ? befinden, so hab ich das verstanden.
-
Wenn du die Datei binär geöffnet hast sollte 54 rauskommen, kommt bei mir auch raus. Im Textmodus kommt bei mir 56 raus. ftell sollte ein long int sein und mit "%ld" ausgegeben werden, vielleicht liegt es daran. Du kannst ja mal vor und nach dem fread ein printf("%ld\n", ftell(fSrc)); einfügen.
-
Hmm.....
Als wie lese ich in diesem Falle bspw. 16 Bytes von der (Byte!) Position 256 in einer Datei?
-
fseek(fSrc, 256, 0); fread(buffer, 1, 16, fSrc);
Wie gesagt, klappt nur wenn du fSrc mit "rb" geöffnet hast, bei "r" gibts komische Umrechnungen.
-
rewind(fSrc); printf("%ld\n", ftell(fSrc)); fread(pHdr,1,1,fSrc); printf("%ld\n", ftell(fSrc));
0
3585
-
Oh, ich habe das mit dem "b" nicht gesehen. Ich wusste nicht, dass man eine Datei explizit im Binärmodus öffnen muss
Jezt funktioniert alles
-
Ishildur schrieb:
0
3585
-
Wenn du die Datei binär geöffnet hast...
kann man sich darauf verlassen? also ich meine ist das dann immer so?
-
scheint so als unterscheiden sich div. internet quellen vom standard hab da gerade mal nen blick rein geworfen, sollt ich öfter machen so wie es scheint...
-
Ich benutze http://www.cplusplus.com/reference/clibrary/ als Referenz. Da stehen auch immer kleine Beispiele, Hinweise und verwandte Funktionen.
Bei ftell steht dort sinngemäß, dass bei binären Dateien die Anzahl der Bytes zurückgegeben wird, bei Textdateien stimmt die Zahl nicht zwangsweise mit den Bytes überein, jedoch funktionieren ftell und fseek nach derselben Nummerierung.Bisher habe ich dieser Seite vertraut und bin noch nicht reingefallen. Vielleicht hat ja jemand einen Link zu einem kommentierten ISO-Standard wo nicht nur der ISO-Standard sondern auch diese Hinweise und Beispiele drinstehen, ordentlich verlinkt miteinander.