Максимальный размер файла на платформе Windows

Согласно этой странице википедии, размер отдельного файла на Win10 может увеличиться до 8 ПБ с NTFS. Тем не менее, структура Stat определяется как

struct stat
{
    _dev_t         st_dev;
    _ino_t         st_ino;
    unsigned short st_mode;
    short          st_nlink;
    short          st_uid;
    short          st_gid;
    _dev_t         st_rdev;
    _off_t         st_size;
    time_t         st_atime;
    time_t         st_mtime;
    time_t         st_ctime;
};

где off_t - это тип, определенный как long. Это означает ограничение примерно в 4 ГБ. Согласно этой странице, описывающей стековый поток, даже для 32-битной ОС размер файла может быть больше его.

Если я не ошибаюсь, как можно использовать struct stat для надежного получения размера файла. Кроме того, что произойдет, если размер файла превысит ограничение типа long?

1 ответ

Решение

Лучше использовать 64-битные версии функций stat.

Структура __stat64 из stat.h включаемый файл:

struct _stat64
{
    _dev_t         st_dev;
    _ino_t         st_ino;
    unsigned short st_mode;
    short          st_nlink;
    short          st_uid;
    short          st_gid;
    _dev_t         st_rdev;
    __int64        st_size;
    __time64_t     st_atime;
    __time64_t     st_mtime;
    __time64_t     st_ctime;
};

Здесь st_size является __int64 который является 64-битным, а не 32-битным.

Другие вопросы по тегам