C: Was ist der richtige Datentyp für Dateigrößen in Bytes?

8

Wenn ich etwas wie double verwende, um Dateigrößen in Bytes zu halten, wird dies natürlich sehr bald scheitern, also welchen Datentyp würde ich verwenden? Heutzutage sind ein paar TB üblich, daher möchte ich, dass der Datentyp eine so große Zahl enthält.

    
EnibMoc1994 08.09.2011, 08:16
quelle

6 Antworten

6

Es wird von Ihrer Plattform abhängen. Unter Unix System können Sie wahrscheinlich den off_t -Typ verwenden. Unter Windows möchten Sie wahrscheinlich LARGE_INTEGER verwenden. Dies sind die Typen, die auf diesem System von der Funktion verwendet werden, die die Dateigröße zurückgibt ( stat unter Unix, GetFileSize unter Windows).

Wenn Sie einen portablen Typ wünschen, sollte uint64_t groß genug sein.

    
Sylvain Defresne 08.09.2011, 08:21
quelle
2

Es gibt eine Funktion namens ftello() , die ein off_t zurückgibt.

Mit fgetpos() benötigen Sie eine fpos_t Variable - EDIT: was nicht unbedingt ein arithmetischer Typ ist.

So off_t könnte / sollte Ihren Anforderungen entsprechen und Sie unabhängig von den tatsächlichen Datentypgrößen halten.

    
glglgl 08.09.2011 08:21
quelle
1

Vielleicht möchten Sie sich mit off_t beschäftigen, da dies Standardfunktionen wie fseeko und ftello verwenden.

    
Paul R 08.09.2011 08:21
quelle
1

size_t ist das für Dateigrößen in C übliche Format, aber der Typ ist plattformabhängig (32-Bit oder 64-Bit unsigned int unter Windows). Ich würde vorschlagen, __int64 (ein 64-Bit-Int) - sollte mit bis zu 138.547.332 Terrabyte bewältigen.

BEARBEITEN: Wenn Sie nur nachprüfen, erhält der Windows-API-Aufruf GetFileSizeEx einen LARGE_INTEGER, eine 64-Bit-Ganzzahl mit Vorzeichen. Also wäre LARGE_INTEGER auch ein guter.

    
Nick Shaw 08.09.2011 08:19
quelle
1

Die libc stat verwendet off_t , was ein typedef für einen unsignierten 64-Bit-Typ ist. Das wäre für eine Weile geeignet.

    
Michael Foukarakis 08.09.2011 08:23
quelle
1

long long ist ein Pop-Favorit:)

    
paulsm4 08.09.2011 08:19
quelle

Tags und Links