如何读取目录中的文件时间戳

时间:2014-09-23 06:33:46

标签: linux file-io timestamp stat

我想读取C中目录中所有文件的统计信息(linux:Fedora)

我宣布了这个结构:

struct stat st = {0};  

然后我检查目录是否存在。

if(stat("/home/gadre/Source",&st) == -1)
{
    status = mkdir("/home/gadre/Source", 0777);             
}
syslog(LOG_INFO, "Source Directory stage completed\n");     

其中stat是:

struct stat {
    dev_t     st_dev;     /* ID of device containing file */
    ino_t     st_ino;     /* inode number */
    mode_t    st_mode;    /* protection */
    nlink_t   st_nlink;   /* number of hard links */
    uid_t     st_uid;     /* user ID of owner */
    gid_t     st_gid;     /* group ID of owner */
    dev_t     st_rdev;    /* device ID (if special file) */
    off_t     st_size;    /* total size, in bytes */
    blksize_t st_blksize; /* blocksize for file system I/O */
    blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
    time_t    st_atime;   /* time of last access */
    time_t    st_mtime;   /* time of last modification */
    time_t    st_ctime;   /* time of last status change */
};

现在,一旦我进入目录,我想检查最后修改时间st_mtime 每个文件。

任何想法我应该使用什么数据结构......应该首先将fd存储在列表中,然后迭代检查...什么是有效的方法。

感谢。

1 个答案:

答案 0 :(得分:1)

通用方法是循环而没有像容器这样的列表,

  1. 打开你的目录dp = opendir(fullpath))的完整路径并获取目录指针
  2. 通过阅读此dp
  3. 之类的while ( (dirp = readdir(dp)) != NULL )来循环播放
  4. 从dirent结构dirp->d_name
  5. 获取文件名
  6. 为filepahts构建一个新的完整路径,即像filepath = fullpath + "/" + dirp->d_name
  7. 这样的smth
  8. 并最终执行lstat以获取时间戳信息
  9. P.S。我更愿意使用lstat,因为您目录中的一个文件可能是符号链接,在这种情况下lstat将返回符号链接本身的时间戳,而不是文件的时间戳。它指向