Ближайшим приближением к 'дате создания' является элемент st_ctime
в struct stat
, но он фактически записывает последний раз, когда индекс изменялся.Если вы создаете файл и никогда не изменяете его размер или разрешения, это работает как время создания.В противном случае не будет записи о том, когда был создан файл, по крайней мере, в стандартных системах Unix.
Для ваших целей сортируйте по st_mtime
... или получайте файлы с именами с отметкой времени в имени.
Обратите внимание, что если вы работаете в Darwin (Mac OS X), время создания доступно.Со страницы руководства для stat(2)
:
Однако, когда макрос _DARWIN_FEATURE_64_BIT_INODE
определен, структура статистики теперь будет определена как:
struct stat { /* when _DARWIN_FEATURE_64_BIT_INODE is defined */
dev_t st_dev; /* ID of device containing file */
mode_t st_mode; /* Mode of file (see below) */
nlink_t st_nlink; /* Number of hard links */
ino_t st_ino; /* File serial number */
uid_t st_uid; /* User ID of the file */
gid_t st_gid; /* Group ID of the file */
dev_t st_rdev; /* Device ID */
struct timespec st_atimespec; /* time of last access */
struct timespec st_mtimespec; /* time of last data modification */
struct timespec st_ctimespec; /* time of last status change */
struct timespec st_birthtimespec; /* time of file creation(birth) */
off_t st_size; /* file size, in bytes */
blkcnt_t st_blocks; /* blocks allocated for file */
blksize_t st_blksize; /* optimal blocksize for I/O */
uint32_t st_flags; /* user defined flags for file */
uint32_t st_gen; /* file generation number */
int32_t st_lspare; /* RESERVED: DO NOT USE! */
int64_t st_qspare[2]; /* RESERVED: DO NOT USE! */
};
Обратите внимание на поле st_birthtimespec
.Также обратите внимание, что все времена находятся в значениях struct timespec
, поэтому есть временная задержка менее секунды (tv_nsec
дает наносекундное разрешение).POSIX 2008 <sys/stat.h>
требует, чтобы struct timespec
время соответствовало стандартному времени;Дарвин следует этому.