Dateigröße auslesen



  • Also ich habe folgendes Problem. Für meine Diplomarbeit brauche ich ein Tool, was die Größe einer Datei ausließt, ansich kein Problem, aber leider geht dies nur bis zu einem Wert mit 4byte, und manche Dateien sind doch 80GB groß. Was könnte man da machen um trotzdem den Wert auszulesen.

    Danke bereits im vorraus

    Testprogramm:

    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <io.h>
    #include <string.h>

    #define MAX_STRING 80

    main()
    {
    FILE *stream;
    char puffer[MAX_STRING];
    long len;
    strcat(puffer,"test.txt"); /
    if((stream = fopen(puffer,"r")) == NULL)
    {
    printf("\nOeffnungsfehler!\n");
    getch();
    exit(1);
    }

    len=filelength(fileno(stream)); /
    printf("%ld",len);
    getch();
    fclose(stream);
    }//end main



  • Falls du die Datei selbst erstellt hast, kannst du ja die größe in den File- Header schreiben, das ist auch das gängigste bei modernen Datenformaten.



  • Ansonsten könnte auch fseek/ftell weiterhelfen.



  • fread sollte dir auch nützlich sein. Kannst dir ja mal im Internet angucken, wie man einigermaßen professionell Dateien lädt.
    http://www.xbdev.net/ --> Fileformats



  • Captain_Jack_Sparrow schrieb:

    Für meine Diplomarbeit brauche ich ein Tool, was die Größe einer Datei ausließt, ansich kein Problem, aber leider geht dies nur bis zu einem Wert mit 4byte, und manche Dateien sind doch 80GB groß. Was könnte man da machen um trotzdem den Wert auszulesen.

    4 Byte? Sollte wohl 4 GB heissen? 🙂
    AFAIK garantiert die Std-Lib Implementierung der Dateifunktionen nicht, die vollen Möglichkeiten des Dateisystems auszunutzen. Wenn du unbedingt 80 GB Dateien ansprechen willst, musst du wohl auf was plattform-spezifisches zurückgreifen. Unter Win32 ist das zB kein Problem. Dort kannst du den Dateizeiger theoretisch für 2^63 Byte grosse Dateien positionieren und entsprechend lesen bzw. schreiben. Funktionen wie SetFilePointer und SetFilePointerEx helfen dir dabei. Das ganze schön gekapselt und man kann sowas auch für andere Systeme implementieren ohne das eigentliche Programm anzupassen.

    Mal abgesehen davon, ist dein Code C und nicht C++. Und dort heisst es 'int main(void)'.


Anmelden zum Antworten