比较C中两个文件的日期和时间[关闭]

Posted

技术标签:

【中文标题】比较C中两个文件的日期和时间[关闭]【英文标题】:Compare the date and time of two files in C [closed] 【发布时间】:2022-01-18 21:21:11 【问题描述】:

我正在linux系统中编写程序,我必须根据当前目录中的时间戳找到最新修改的文​​件(即:已修改的最新文件)。

在下面的示例中,我必须查看目录中的所有文件并找到具有最新时间戳的文件(即 File.txt)。

/root/MyProgram       <- Current Directory
 -Test1.txt    25/10/2019  14:30:26
 -TEST2.bin    15/01/2020  18:12:36
 -Test3.bin    06/05/2021  08:45:10
 -File.txt     06/12/2021  03:10:55

我能够获取当前目录中每个文件的时间戳,但我想要一种方法来比较两个时间戳(比较日期和时间)。

void show_dir_content(char *path) 
    struct dirent *dir;
    struct stat statbuf;
    char datestring[256];
    struct tm *tm;
    DIR *d = opendir(path);
    if (d == NULL) 
        return;  
    
    //
    while ((dir = readdir(d)) != NULL) 
        if (dir->d_type == DT_REG) 
            char f_path[500];
            char filename[256];
            sprintf(filename, "%s", dir->d_name);
            sprintf(f_path, "%s/%s", path, dir->d_name);
            printf("filename: %s", filename);
            printf("  filepath: %s\n", f_path);

            if (stat(f_path, &statbuf) == -1) 
                fprintf(stderr,"Error: %s\n", strerror(errno));
                continue;
            
            tm = gmtime(&statbuf.st_mtime);
            time_t t1 = statbuf.st_mtime;
            strftime(datestring, sizeof(datestring), " %x-%X", tm);
            printf("datestring: %s\n", datestring);
        

        if (dir->d_type == DT_DIR && strcmp(dir->d_name, ".") != 0 && strcmp(dir->d_name, "..") != 0) 
            printf("directory: %s ", dir->d_name);
            char d_path[500]; 
            sprintf(d_path, "%s/%s", path, dir->d_name);
            printf("  dirpath: %s\n", d_path);
            show_dir_content(d_path);
        
    
    closedir(d);

【问题讨论】:

您在寻找这个:***.com/questions/30895970/comparing-timespec-values 吗?这个问题也是你正在寻找的答案。它适用于 C++,因此您需要将 timespec 替换为 struct timespec "我能够获取当前目录中每个文件的时间戳" --> 发布执行此操作的 C 代码。 这能回答你的问题吗? Comparing timespec values 【参考方案1】:

最后修改时间的时间戳是statbuf.st_mtime。类型为struct timespec,结构体有2个成员:

tv_sec,自 1970 年 1 月 1 日 0:00:00 UTC 以来的秒数, tv_nsec,几纳秒。

您可以这样比较 2 个这样的时间戳:

// compare 2 timespecs:
// return -1 if t1 < t2, 0 if they are equal, 1 if t1 > t2

int compare_timespec(const struct timespec *t1, const struct timespec *t2) 
    if (t1->tv_sec == t2->tv_sec)
        return (t1->tv_nsec > t2->tv_nsec) - (t1->tv_nsec < t2->tv_nsec);
    else
        return (t1->tv_sec > t2->tv_sec) ? 1 : -1;

【讨论】:

以上是关于比较C中两个文件的日期和时间[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

我试图比较两个日期“2017 年 5 月 1 日星期六”和“2017-07-23”,但第一个日期存储为字符串 [关闭]

C#比较存储在XML文件中的两个日期时间

java怎么比较两个日期(年和月)的大小

比较来自 MySql 和 Datepicker 的日期 [关闭]

加入两个表日期并获取每个项目的最新日期[关闭]

如何比较给定日期(字符串)是当前日期和最后 8 个日期? [关闭]