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