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 ichsize = 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.