Wie bekomme ich eine Dateigröße, die größer als 4 GB ist?

8

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.

    
kampi 02.03.2010, 06:58
quelle

5 Antworten

3

Sie können wahrscheinlich _stat64 verwenden.

    
Aryabhatta 02.03.2010, 07:06
quelle
5

Sie können die Funktion Win32 GetFileSizeEx verwenden.

%Vor%     
Kerido 02.03.2010 07:01
quelle
3

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.

    
Arun 02.03.2010 07:19
quelle
1

st_size ist in wchar.h so lang definiert, dass Sie es wahrscheinlich mit long anstatt mit int

versuchen könnten %Vor%

Kann so sein

%Vor%     
YOU 02.03.2010 07:08
quelle
0

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).

    
Pavunkumar 02.03.2010 07:04
quelle

Tags und Links