比较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”,但第一个日期存储为字符串 [关闭]