C: какой правильный тип данных использовать для размеров файлов в байтах?
Если я использую что-то вроде double
чтобы удерживать размеры файлов в байтах, это, естественно, произойдет очень скоро, поэтому какой тип данных я буду использовать? В настоящее время пара ТБ распространена, поэтому я хотел бы, чтобы тип данных мог содержать такое большое число.
6 ответов
Это зависит от платформы. На системе Unix, вы, вероятно, можете использовать off_t
тип. В Windows вы, вероятно, захотите использовать LARGE_INTEGER
. Это типы, используемые в этой системе функцией, возвращающей размер файла (stat
на Unix GetFileSize
в Windows).
если вы хотите портативный тип, uint64_t
должен быть достаточно большим.
существует функция под названием ftello()
возвращает off_t
.
С fgetpos()
вам понадобится fpos_t
variable-EDIT: который не обязательно является арифметическим типом.
так off_t
может / должно соответствовать вашим потребностям и не зависит от фактических размеров типов данных.
size_t является обычным для filesizes в C, но тип его зависит от платформы (32-разрядный или 64-разрядный unsigned int в Windows). Я предлагаю __типа int64 (64-разрядный инт) - должны справиться с 138,547,332 terrabytes.
EDIT: просто проверка, вызов API Windows GetFileSizeEx
получает LARGE_INTEGER, 64-разрядное целое число со знаком. Так что LARGE_INTEGER тоже будет хорошим.
то libc stat
использует off_t
, который является typedef для типа unsigned, 64-битный тип. Это подойдет на некоторое время.