it-swarm-ja.com

Windowsプラットフォームでの最大ファイルサイズ

このウィキペディアのページ によると、Win10の個々のファイルのサイズはNTFSで最大約8PBになる可能性があります。しかし、構造体統計は次のように定義されています

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として定義されたタイプです。これは、約4GBの制限を意味します。 このstackoverflowページ によると、32ビットOSの場合でも、ファイルのサイズはそれより大きくなる可能性があります。

何かを間違えない限り、structstatを使用してファイルのサイズを確実に取得するにはどうすればよいですか。さらに、ファイルサイズがlong型の制限を超えるとどうなりますか?

5
John Z. Li

stat関数 の64ビットバージョンを使用する必要があります。

stat.hインクルードファイルの__stat64構造:

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であり、これは32ビットではなく64ビットです。

5
harrymc