wie kann ich die größe einer datei auslesen?
-
suche eine funktion oder ähnliches, die mir die größe einer datei in byte zurück gibt!
bitte um hilfe!
-
Die Funktion stat hilft dir!
// die Struktur , wo die Infos zurückliefert struct stat filestat; // und stat.st_size gibt die Größe der Datei in byte zurück
-
alex89ru schrieb:
Die Funktion stat hilft dir!
// die Struktur , wo die Infos zurückliefert struct stat filestat; // und stat.st_size gibt die Größe der Datei in byte zurück
Gehts vielleicht noch ein bischen ungenauer? Wie initialisiere ich stat mit der entsprechenden Datei? ...
@Freedomrunner:
Öffne die Datei mit fopen(). Danach setzt du mit fseek() den Dateizeiger ans Ende der Datei und lässt dir dann per ftell() die Position desselben (gemessen vom Dateianfang) liefern, an der sich der Dateizeiger z.Z. befindet. Ergo, du bekommst so die Anzahl der Zeichen der Datei. (Wenn du nur mit dem ascii/ansi Zeichensatz hantierst, kannst du davon ausgehen, dass "anzahl der Zeichen in der Datei" = "Dateigröße" in Bytes).Soweit ich weiß gibt es nur diese portable Methode. Ansonsten musst du die API deines OS's verwenden.
Gruß Caipi
-
und was muss ich der struktur übergeben?
wie weiß die struktur welches file? bitte ein kleines code bsp!danke!
-
#include <sys/types.h> #include <sys/stat.h> int main(){ struct stat fs; stat("filename.txt" , &fs); int filesize = fs.st_size; // Dateigröße return 0}
-
Und ich verstehe eines nicht: das hier ist ANSI-C Forum trotzdem werden hier dauern Betriebsystem-spezifische lösungen vorgeschlagen, ohne es zumindest zu erwähnen das es so ist.
-
Sorry , ber mir fällt halt nur die Lösung ein.
Funktioniert aber.
-
Marcin schrieb:
Und ich verstehe eines nicht: das hier ist ANSI-C Forum trotzdem werden hier dauern Betriebsystem-spezifische lösungen vorgeschlagen, ohne es zumindest zu erwähnen das es so ist.
Könnte evtl. daran liegen dass nicht jeder ständig für jedes Betriebssystem nen Compiler laufen hat und ständig auf beiden dasselbe ausprobiert...
Wenn's danach geht, macht doch bitte ein ANSI C (Windows), ein ANSI C (POSIX), ein ANSI C (BSD), ein ANSI C (SystemV), ein ANSI ............
-
oder auch ANSI C (ANSI C):
int len; FILE *f = fopen("file", "rb"); fseek(f, 0, CUR_END); len = ftell(f); fclose(f);
(ungetestet)
-
int getFileSize(char * Filename) { int len; FILE *f = fopen(Filename, "rb"); fseek(f, 0, SEEK_END); len = ftell(f); fclose(f); return len; }
Edit by c.rackwitz: Danke, dass Du meinen ungetesteten Code in eine Funktion gehuellt hast
-
c.rackwitz schrieb:
oder auch ANSI C (ANSI C):
int len; FILE *f = fopen("file", "rb"); fseek(f, 0, CUR_END); len = ftell(f); fclose(f);
(ungetestet)
Funktioniert in den meisten Fällen, aber nicht immer. Gab dazu mal einen Thread in dem erklärt wird warum das nicht funktioniert - finde ihn bloß leider nicht mehr
MfG SideWinder
-
SideWinder schrieb:
c.rackwitz schrieb:
oder auch ANSI C (ANSI C):
int len; FILE *f = fopen("file", "rb"); fseek(f, 0, CUR_END); len = ftell(f); fclose(f);
(ungetestet)
Funktioniert in den meisten Fällen, aber nicht immer. Gab dazu mal einen Thread in dem erklärt wird warum das nicht funktioniert - finde ihn bloß leider nicht mehr
Steht aber sogar im Standard, daß 'fseek(..., SEEK_END)' auf Binärströme angewandt, undefiniert ist (Fußnote 225, wen's interessiert) und für nicht binäre Ströme teilt ftell nicht mehr zuverlässig die Größe mit.
Ist aber vermutlich tatsächlich ein rein akademischer Einwand, auf den üblichen Betriebssystemen. Aber man sollte es vielleicht mal erwähnt haben.
-
@Danial E.: mmh.... programmierst du Compiler