繁体   English   中英

获取目录C中最旧的文件

[英]getting the oldest file in a directory C

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

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

您需要处理启动条件。 您可以尝试将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;
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM