
根據這個維基百科頁面,Win10 上的單一檔案大小在 NTFS 下可達 8 PB 左右。然而 struct 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 GB 的限制。根據這個 stackoverflow 頁面,即使是32位元作業系統,檔案的大小也可能比它大。
除非我弄錯了什麼,否則如何使用 struct stat 可靠地獲取檔案的大小。另外,如果檔案大小超過了long類型的限制,會發生什麼事呢?
答案1
您應該使用 64 位元版本 統計函數。
__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 位元。