商城首页欢迎来到中国正版软件门户

您的位置:首页 >readdir如何获取文件最后访问时间

readdir如何获取文件最后访问时间

  发布于2026-04-25 阅读(0)

扫一扫,手机访问

在C语言中获取目录文件最后访问时间:readdir与stat的协同

在C语言里处理目录时,readdir函数是绕不开的工具。但这里有个常见的误解:不少人以为用它就能直接拿到文件的各类属性,比如最后访问时间。其实不然,readdir的核心任务很单纯——就是帮你遍历目录条目,读取文件名等基础信息。真要获取像访问时间这样的元数据,你得请出另一位“搭档”:stat函数。

readdir如何获取文件最后访问时间

那么,具体怎么把这两者结合起来用呢?下面这个示例程序清晰地展示了从打开目录到打印出每个文件最后访问时间的完整流程。

完整代码示例与解析

#include 
#include 
#include 
#include 
#include 

int main() {
    DIR *dir;
    struct dirent *entry;
    struct stat file_stat;

    dir = opendir("."); // 打开当前目录
    if (dir == NULL) {
        perror("opendir");
        return EXIT_FAILURE;
    }

    while ((entry = readdir(dir)) != NULL) {
        // 跳过当前目录和上级目录的特殊条目
        if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
            continue;
        }

        // 构建文件的完整路径
        char file_path[1024];
        snprintf(file_path, sizeof(file_path), "./%s", entry->d_name);

        // 获取文件的stat信息
        if (stat(file_path, &file_stat) == -1) {
            perror("stat");
            continue;
        }

        // 将最后访问时间转换为可读格式并打印
        char time_buf[100];
        strftime(time_buf, sizeof(time_buf), "%Y-%m-%d %H:%M:%S", localtime(&file_stat.st_atime));
        printf("%s: Last accessed time: %s\n", entry->d_name, time_buf);
    }

    closedir(dir);
    return EXIT_SUCCESS;
}

我们来拆解一下这个程序的关键步骤。首先,它用opendir(".")打开当前工作目录,这是所有操作的起点。紧接着,readdir在循环中登场,逐个读取目录中的条目。

这里有个细节需要注意:目录中默认包含代表当前目录(.)和上级目录(..)的特殊条目,通常我们需要在逻辑中主动跳过它们,避免无关输出。

真正的重头戏在获取文件状态信息这一步。程序通过snprintf构建出文件的相对路径,然后调用stat函数。这个函数会将文件的详细信息填充到file_stat结构体中,其中就包含了我们需要的最后访问时间戳st_atime

最后一步是格式化输出。直接打印时间戳可读性太差,所以程序使用localtimestrftime这对组合拳,将时间转换成“年-月-日 时:分:秒”这样一目了然的格式。至此,一个结合目录遍历与文件属性查询的实用工具就完成了。整个过程清晰地表明,readdir负责“点名”,而stat才是那个能告诉你文件“详细履历”的关键角色。

本文转载于:https://www.yisu.com/ask/77166851.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注