我正在使用C程序,需要获取文件的最后修改时间。程序要做的是一个函数循环遍历目录中的每个文件,当找到特定文件时,它将调用另一个函数来检查文件的最后修改时间。
在该目录下有一个mylog.txt.1,mylog.txt.2和mylog.txt.3等当我使用ll命令我可以看到,列出目录在linux mylog.txt.1和mylog.txt.2进行了修改,在5月4日,并mylog.txt.3于5月3日进行了修改。
mylog.txt.1
mylog.txt.2
mylog.txt.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日。
st_ctime
st_mtime
st_atime
感谢您的任何帮助,您可以提供。
这是时区很重要的情况之一。你得到gmtime的st_mtime。您应该改用localtimeviz。
gmtime
localtime
strftime(date, 20, "%d-%m-%y", localtime(&(attrib.st_ctime)));
这是因为ls使用了您的时区信息,并且当您将其gmtime用作显示的一部分时,它故意省略了任何时区信息。
ls