Ich habe eine einfache Funktion gemacht, die eine Dateigröße hat.Wie bekomme ich eine Dateigröße, die größer als 4 GB ist?
int file_size(char * filename)
{
int size;
struct stat st;
stat(filename, &st);
size = st.st_size;
return size;
}//file_size
Es funktioniert gut, aber wenn ich eine Datei, die Größe größer als 4 GB ist als ich eine negative Zahl zurück, und natürlich bekommen dies ist 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 glaube nicht, dass das mein Problem lösen würde.
Danke,
kampi
Update:
Hallo!
Ich fand die Lösung. 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.
unsigned long long int file_size(char * filename)
{
unsigned long long int size;
struct __stat64 st;
__stat64(filename, &st);
size = st.st_size;
return size;
}//file_size
Und ein Hinweis:
Wenn ich printf verwendet, i "% I64d" verwenden musste, um es auszudrucken.
Was passiert, wenn Sie 'int' in' off_t' ändern, oder wenn das nicht verfügbar ist, 'size_t'? Sowohl im Rückgabetyp als auch in der Angabe der Größe. –