最近的近似「創建日期」是在struct stat
的st_ctime
成員,但實際上記錄最後一次inode的改變。如果您創建該文件並且從不修改其大小或權限,那麼該文件將用作創建時間。否則,至少在標準的Unix系統中,沒有創建文件的時間記錄。
出於您的目的,按st_mtime
排序...或獲取名稱中帶有時間戳的文件。
請注意,如果您是在達爾文(Mac OS X上),創建時間是可用的。從手冊頁stat(2)
:
然而,宏定義_DARWIN_FEATURE_64_BIT_INODE
時,stat結構將現在被定義爲:
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
時間保持在標準時間;達爾文遵循這一點。
'fstat'不會因爲許多文件系統不要取「文件創建」時間戳值」跟蹤這些數據。你在使用什麼文件系統? – 2011-05-08 18:36:57
一個是最新的Ubuntu桌面的標準,我想 - 我正在虛擬機上運行我的代碼(準確地說,是vmware播放器),並將所有的細節保存到Ubuntu安裝程序中。 – Srv19 2011-05-08 18:41:41
嘗試'stat(buffer,&buf)'而不是這裏沒有用的'fopen' – mpez0 2011-05-08 19:51:48