Datei in Ansi C lesen und Dateigrösse rechnen!!!!
-
SeppSchrot schrieb:
Du kannst den Filepointer auf das Ende setzen und schauen, an welcher Position er dann steht.
In Code:
long int size = 0; FILE* file = (FILE*)NULL; file = fopen("bla.txt", "rb"); if(file) { fseek(file, 0L, SEEK_END); size = ftell(file); fclose(file); }
-
FILE* file = (FILE*)NULL;
das sieht der Compiler wie
FILE* file = (FILE*)((void*)0);irgendwie lustig
fstat ist besser, oder GetFileSize, oder was das Betriebssystem halt hergibt.
-
@Shade Of Mine
Gehört fstat zu standard C oder ist eine MS-ErweiterungGetFileSize scheint ja zu windows zu gehören
-
Gehört AFAIK nicht dazu. Habs auch im Standard net gefunden...
-
Dann ist code_pilot Methode richtig. Da mann immer wieder brauxht lohnt es sich daraus eine Funktion zu machen, inclusive Fehlerhandling siehe ftell
-
PAD schrieb:
Dann ist code_pilot Methode richtig.
fseek(..., SEEK_END) hat undefiniertes Verhalten auf Binärströmen (und liefert auf Textströmen potentiell falsche Ergebnisse). Naja, auf den meisten Systemen wird's wohl trotzdem tun.
-
@Daniel E wo hast du diese Informationen her?
-
Undefiniert, weil du nicht bei jedem Strom von einem Ende ausgehen kannst... zB wann ist bei einem Socket SEEK_END erreicht? Du hast keine Ahnung was noch kommt...
fstat gehört nicht zum C Standard, habe ich aber auch gesagt
Betriebssystemfunktionen wie zB fstat und Co
In diesem Fall hier ist ein fstat/GetFileSize bzw. ähnliches sinnvoller. Weil hier der Standard einfach keine vernüftige Lösung bietet.
-
-
Zur Vollständigkeit...
ANSI-ISO-IEC 9899 (1999) schrieb:
Setting the file position indicator to end-of-file, as with fseek(file, 0, SEEK_END), has
undefined behavior for a binary stream (because of possible trailing null characters) or for any stream
with state-dependent encoding that does not assuredly end in the initial shift state.