
De acuerdo aesta página de wikipedia, el tamaño de un archivo individual en Win10 puede llegar hasta aproximadamente 8 PB con NTFS. Sin embargo, la estructura Stat se define como
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;
};
donde off_t es el tipo definido como largo. Eso significa un límite de aproximadamente 4 GB. De acuerdo aesta página de desbordamiento de pila, incluso para sistemas operativos de 32 bits, el tamaño de un archivo puede ser mayor.
A menos que me haya equivocado en algo, ¿cómo se puede usar struct stat para obtener el tamaño de un archivo de manera confiable? Además, ¿qué pasará si el tamaño del archivo excede el límite del tipo largo?
Respuesta1
Preferiría utilizar las versiones de 64 bits del funciones estadísticas.
La __stat64
estructura del stat.h
archivo de inclusión:
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;
};
Aquí st_size
está __int64
cuál es de 64 bits y no de 32 bits.