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 может / должно соответствовать вашим потребностям и не зависит от фактических размеров типов данных.


вы можете посмотреть на использование off_t, Так это то, что стандартные функции, такие как fseeko и ftello использовать.


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-битный тип. Это подойдет на некоторое время.


long long поп любимый :)