一尘不染

获取Linux中文件的最后修改时间

linux

我正在使用C程序,需要获取文件的最后修改时间。程序要做的是一个函数循环遍历目录中的每个文件,当找到特定文件时,它将调用另一个函数来检查文件的最后修改时间。

在该目录下有一个mylog.txt.1mylog.txt.2mylog.txt.3等当我使用ll命令我可以看到,列出目录在linux
mylog.txt.1mylog.txt.2进行了修改,在5月4日,并mylog.txt.3于5月3日进行了修改。

但是,当程序检查这些文件中的每个文件时,它总是会返回3rd may。下面是我正在使用的代码。

void getFileCreationTime(char *filePath)
{
    struct stat attrib;
    stat(filePath, &attrib);
    char date[10];
    strftime(date, 10, "%d-%m-%y", gmtime(&(attrib.st_ctime)));
    printf("The file %s was last modified at %s\n", filePath, date);
    date[0] = 0;
}

我尝试了的所有不同变体st_ctime,即st_mtime和,st_atime但是它们都返回5月3日。

感谢您的任何帮助,您可以提供。


阅读 1027

收藏
2020-06-03

共1个答案

一尘不染

这是时区很重要的情况之一。你得到gmtimest_mtime。您应该改用localtimeviz。

strftime(date, 20, "%d-%m-%y", localtime(&(attrib.st_ctime)));

这是因为ls使用了您的时区信息,并且当您将其gmtime用作显示的一部分时,它故意省略了任何时区信息。

2020-06-03