【发布时间】:2012-05-13 20:41:30
【问题描述】:
我正在开发一个 C 程序,我需要在其中获取文件的最后修改时间。程序所做的是一个函数循环遍历目录中的每个文件,当找到特定文件时,它会调用另一个函数来检查文件的最后修改时间。
目录中有mylog.txt.1、mylog.txt.2和mylog.txt.3等。当我在linux中使用ll命令列出目录时,我可以看到mylog.txt.1和mylog.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 日返回。
感谢您提供的任何帮助。
【问题讨论】:
-
也许首先清理:为什么在缓冲区长度为 10 时将 20 的大小传递给
strftime?为什么不检查stat的返回值呢?如果stat失败,您正在解析一个垃圾值。 -
确保你传递不同的文件路径,“attrib.st_ctime”也会给出“最后一次状态变化的时间”,如果你正在寻找“最后一次修改的时间”,你需要使用“attrib .st_mtime"
标签: c linux timestamp last-modified