Datei in Ansi C lesen und Dateigrösse rechnen!!!!
-
Hallo Allerseits,
ich habe folgendes vor und brauche eure Tips.Ich möchte vier Datein in binäre Format lesen und jeweils die Grösse der Dateien rechenen.
Mit fopen kann ich mir vorstellen wird es mit dem lesen der Datei gehen aber wie kann ich die Größe der Datei rechenen bzw. wissen.
Vielen Dank im Voraus
Karomi
-
Du kannst einfach mit fseek und ftell die Datei messen, sinnvoller sind aber Betriebssystemfunktionen wie zB fstat und Co.
-
Du kannst den Filepointer auf das Ende setzen und schauen, an welcher Position er dann steht.
-
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.