根据这个维基百科页面,在 NTFS 中,Win10 上单个文件的大小可以达到约 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 位。