C: Какой тип данных подходит для размера файла в байтах? - PullRequest
8 голосов
/ 08 сентября 2011

Если я использую что-то вроде double для хранения размеров файлов в байтах, это, естественно, очень скоро завершится неудачей, так какой тип данных я бы использовал? В настоящее время пара ТБ встречается часто, поэтому я бы хотел, чтобы тип данных мог содержать такое большое число.

Ответы [ 6 ]

6 голосов
/ 08 сентября 2011

Это будет зависеть от вашей платформы.В Unix System вы, вероятно, можете использовать тип off_t.В Windows вы, вероятно, захотите использовать LARGE_INTEGER.Эти типы используются в этих системах функцией, возвращающей размер файла (stat в Unix, GetFileSize в Windows).

Если вы хотите переносимый тип, uint64_t должно быть достаточно большим.

2 голосов
/ 08 сентября 2011

Существует функция с именем ftello(), которая возвращает off_t.

. С fgetpos() вам нужна переменная fpos_t - EDIT: не обязательно арифметический тип.

Таким образом, off_t может / должен соответствовать вашим потребностям и держать вас в независимости от фактических размеров типов данных.

1 голос
/ 08 сентября 2011

libc stat использует off_t, который является typedef для 64-битного типа без знака.Это подойдет на некоторое время.

1 голос
/ 08 сентября 2011

Возможно, вы захотите взглянуть на использование off_t, поскольку для этого используются стандартные функции, такие как fseeko и ftello .

1 голос
/ 08 сентября 2011

size_t - обычный размер файлов в C, но его тип зависит от платформы (32-разрядный или 64-разрядный тип unsigned int в Windows). Я бы посоветовал __int64 (64-битное целое число) - должен обрабатывать до 138 547 333 террабайтов.

РЕДАКТИРОВАТЬ: Просто проверка, вызов Windows API GetFileSizeEx возвращает LARGE_INTEGER, который представляет собой 64-разрядное целое число со знаком. Так что LARGE_INTEGER тоже подойдет.

1 голос
/ 08 сентября 2011

long long является поп-фаворитом:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...