Ich habe eine einfache Funktion erstellt, die die Größe einer Datei ergibt.
%Vor%Es funktioniert gut, aber wenn ich eine Datei habe, die größer als 4 GB ist, bekomme ich eine negative Nummer zurück, und natürlich hat das nicht die richtige Dateigröße. Wie kann ich eine so große Dateigröße bekommen? Ich denke, dass der Rückgabewert alles andere wie int sein sollte, aber ich weiß nicht was, und ich denke nicht, dass das mein Problem lösen würde.
Danke,
kampi
Aktualisierung:
Hallo!
Ich habe die Lösung gefunden. Ich muss __stat64 verwenden. Ich habe meine Funktion geändert und jetzt wird die tatsächliche Größe abgerufen. Ich habe es mit einer 8 GB großen Datei getestet.
%Vor%Und ein Hinweis:
Wenn ich printf verwendet habe, musste ich "% I64d" verwenden, um es auszudrucken.
In solchen Fällen kann der Rückgabewert von stat()
-1 sein, und errno
ist auf EOVERFLOW
gesetzt.
Die Manpage für stat
auf meinem (64-Bit x86-Rechner) sagt:
EOVERFLOW
(stat ()) path verweist auf eine Datei, deren Größe kann im Typ nicht dargestellt werden aus_t. Dies kann auftreten, wenn ein Anwendung kompiliert auf einem 32-Bit Plattform ohne -D_FILE_OFFSET_BITS = 64 ruft stat () für eine Datei auf, deren Größe (2 & lt; & lt; 31) -1 übersteigt Bits.
Ich denke, das Problem ist wegen der Dateigröße mehr als INT_MAX, so dass es Ihnen gibt negative Werte.
Wahrscheinlich können Sie einen Cast für einen langen Datentyp schreiben, es könnte funktionieren.
Ansonsten verwenden Sie, fseek, ftell-Funktion. subtrahiere dann den Enddateizeiger vom Startdateizeiger. Es gibt Ihnen auch die Dateigröße. (Anzahl der Bytes).