Dateigröße einer wirklich großen Datei auslesen



  • Hi.
    Ich bin nicht sicher, evtl gehört das ins Linux-board, aber ich poste mal hier...

    Ich versuche, /dev/hda1 zu öffnen und auszulesen. Öffnen klappt prima, aber die Dateigröße lässt sich nicht auslesen, statt dessen liefert mir perror folgende meldung: "Value too large for defined data type". Der definierte Datentyp ist ein unsigned long.

    Naja, mal etwas code:

    FILE*	pSourceFile	= 0;
        filename = argv[1];
        pSourceFile	= fopen(argv[1] , "rb");
        if(pSourceFile == NULL)
            printf("Error in opening file.\r\n");
        struct	stat	sz;
        stat(argv[1] , &sz);
        size = sz.st_size;
        if(size == 0)
        {
    
            fseek (pSourceFile,0,SEEK_END);
            size = ftell(pSourceFile);
            if(size == -1)
                perror("Error: Unable to get the real file size: ");
        }    
    
        data = (unsigned char*)malloc(size);
        if(data == NULL)
            printf("Error in allocating memory [%i Mbytes]\r\n", size/1024/1024);
    
        if(fread (data , 1 , size , pSourceFile) == 0)
        {
            perror("Error in reading file ");
            refresh();
            endwin();
            return 1;
        }
    


  • Filesizer schrieb:

    Hi.
    Ich bin nicht sicher, evtl gehört das ins Linux-board, aber ich poste mal hier...

    Durchaus möglich. Wenn ich mir deinen Code ansehe, gehrt es auf jeden Fall nicht ins C**++** Board.

    Ich versuche, /dev/hda1 zu öffnen und auszulesen. Öffnen klappt prima, aber die Dateigröße lässt sich nicht auslesen, statt dessen liefert mir perror folgende meldung: "Value too large for defined data type". Der definierte Datentyp ist ein unsigned long.

    Erstens: An welcher Stelle kommt denn der Fehler?
    Zweitens: Schonmal daran gedacht, daß unsigned long zu klein sein könnte? (stat.st_size ist ein off_t - bin mir nicht sicher, wie groß das ist)
    Drittens: Da du schon die Methode über fseek/ftell kennst, solltest du sie auch sofort nutzen - ist portabler.



  • Der Fehler tritt in Zeile 13 auf.
    Inzwischen habe ich gemerkt, dass es vollkommen egal ist, ob ich

    size = ftell(pSourceFile);
    

    oder

    ftell(pSourceFile);
    

    scheibe... Es kommt trotzdem der Fehler, der Datentyp sei zu klein.

    Doch inzwischen weiß ich, dass stat mir die richtige Größe nennt, /dev/hda1 ist 0 bytes groß. Nur, wo steht denn jetzt die größe von hda1?

    -> biite ins Linux/Unix-Board verschieben, danke.


Anmelden zum Antworten