在linux中获取文件的上次修改时间

Boa*_*rdy 13 c linux timestamp last-modified

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

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

但是当程序检查这些文件时,它总是返回第3个.下面是我正在使用的代码.

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;
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了所有不同的变化st_ctime,即st_mtime,st_atime但他们都返回第3可能.

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

qwe*_*rtz 17

这对我很好:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/stat.h>
#include <sys/types.h>

void getFileCreationTime(char *path) {
    struct stat attr;
    stat(path, &attr);
    printf("Last modified time: %s", ctime(&attr.st_mtime));
}
Run Code Online (Sandbox Code Playgroud)


Pet*_*esh 12

这是时区重要的案例之一.你得到gmtimest_mtime.你应该使用localtimeviz.

strftime(date, 20, "%d-%m-%y", localtime(&(attrib.st_ctime)));
Run Code Online (Sandbox Code Playgroud)

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

  • 不过,我仍然建议在您的函数中进行更多错误检查 (2认同)