我问了一个关于在目录中获取最新文件的类似问题,我得到了我真正喜欢的答案:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <limits.h>
#include <string.h>
#include <ftw.h>
char newest[PATH_MAX];
time_t mtime = 0;
int checkifnewer(const char *path, const struct stat *sb, int typeflag)
{
if (typeflag == FTW_F && sb->st_mtime > mtime) {
mtime = sb->st_mtime;
strncpy(newest, path, PATH_MAX);
}
return 0;
}
main()
{
ftw("./example", checkifnewer, 1);
printf("%s\n", newest);
}
我想使用该函数获取目录中最旧的文件,因为我试图更改条件:
if (typeflag == FTW_F && sb->st_mtime > mtime)
到
if (typeflag == FTW_F && sb->st_mtime < mtime)
程序不会崩溃或给出任何结果,任何想法如何做到这一点! 感谢@Mark Plotnick的回答
答案 0 :(得分:3)
您需要处理启动条件。您可以尝试将mtime
的值初始化为非常高的数字,但由于技术原因,很难可靠地预测可能的内容。最佳初始值只是搜索中的第一个值,一个方便的方法是初始化为零并将其作为特殊情况处理。这是一种通用的编程技术,值得记住。
char newest[PATH_MAX+1] = {0};
time_t mtime = 0;
int check_if_older(const char *path, const struct stat *sb, int typeflag) {
if (typeflag == FTW_F && (mtime == 0 || sb->st_mtime < mtime)) {
mtime = sb->st_mtime;
strncpy(newest, path, PATH_MAX+1);
}
return 0;
}
我做了两个其他的改变。看看你能解决问题的原因。