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

您的位置: 首页 > 文章列表 > 编程开发 > readdir如何获取文件的最后修改时间

readdir如何获取文件的最后修改时间

  发布于2026-07-17 阅读(0)

扫一扫,手机访问

在实际开发中,遍历目录并获取文件信息是常见的需求,比如做文件监控、增量备份、或者简单的文件列表整理。不少朋友一上来就想到用readdir,但readdir只负责把目录里的条目列出来,至于每个文件的最后修改时间、大小、权限这些元数据,它一概不管。这时候就得请出stat函数来帮忙了。

readdir如何获取文件的最后修改时间

下面这段代码就是一个很典型的配合示例,把readdirstat结合起来,遍历当前目录,并打印出每个文件的最后修改时间:

#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[PATH_MAX];
        snprintf(file_path, sizeof(file_path), "./%s", entry->d_name);

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

        // 将最后修改时间转换为可读格式
        char time_str[26];
        strftime(time_str, sizeof(time_str), "%Y-%m-%d %H:%M:%S", localtime(&file_stat.st_mtime));
        printf("File: %s\n", entry->d_name);
        printf("Last modified: %s\n", time_str);
    }

    closedir(dir);
    return EXIT_SUCCESS;
}

代码的逻辑很清晰:先打开目录(这里用了当前目录,实际使用时可以换成任意路径),然后循环读取每一个条目。注意,一定要跳过...这两个特殊目录,否则它们也会被当作普通文件处理,导致不必要的麻烦。接着,用snprintf拼出完整的文件路径,再调用stat获取文件信息。如果stat失败(比如文件被删除或权限不足),直接跳过继续处理下一个。

获取到struct stat后,st_mtime字段里存放的就是最后修改时间,以Unix时间戳的形式(从1970年1月1日开始的秒数)。通过localtimestrftime,很容易就能转换成2025-04-21 14:30:00这种人类友好格式。最后打印出来,一个简单的文件时间列表就完成了。

这里有个小细节值得留意:PATH_MAX是系统定义的最大路径长度,不同平台可能略有差异。如果路径特别长,建议用动态分配或者更安全的realpath来处理。另外,readdir返回的d_name只包含文件名,不包含路径,所以构建完整路径是必须的,否则stat会找不到文件。

总而言之,readdir负责“列出谁在这里”,stat负责“告诉我这个人的详细信息”,两者配合,就能把目录下的文件信息摸个底朝天。

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

热门关注