获取目录C中最旧的文件

时间:2014-08-19 11:24:01

标签: c linux

我问了一个关于在目录中获取最新文件的类似问题,我得到了我真正喜欢的答案:

#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的回答

1 个答案:

答案 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;
}

我做了两个其他的改变。看看你能解决问题的原因。