linux

copendir如何按修改时间排序文件

小樊
42
2025-06-16 00:19:20
栏目: 编程语言

copendir 函数本身并不提供直接按修改时间排序文件的功能。但是,你可以使用 readdir 函数读取目录中的文件,然后将文件信息存储在一个结构体数组中,并根据修改时间对这个数组进行排序。以下是一个使用 C 语言实现的示例:

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>
#include <string.h>
#include <time.h>

typedef struct {
    char name[256];
    time_t mtime;
} FileInfo;

int compare(const void *a, const void *b) {
    FileInfo *fileA = (FileInfo *)a;
    FileInfo *fileB = (FileInfo *)b;
    return difftime(fileA->mtime, fileB->mtime);
}

int main() {
    DIR *dir;
    struct dirent *entry;
    FileInfo files[100];
    int count = 0;

    dir = opendir(".");
    if (dir == NULL) {
        perror("opendir");
        return 1;
    }

    while ((entry = readdir(dir)) != NULL) {
        if (entry->d_type == DT_REG) {
            struct stat file_stat;
            snprintf(files[count].name, sizeof(files[count].name), "%s", entry->d_name);
            if (stat(files[count].name, &file_stat) == 0) {
                files[count].mtime = file_stat.st_mtime;
                count++;
            }
        }
    }

    closedir(dir);

    qsort(files, count, sizeof(FileInfo), compare);

    for (int i = 0; i < count; i++) {
        printf("%s - %s", files[i].name, ctime(&files[i].mtime));
    }

    return 0;
}

这个示例程序首先定义了一个 FileInfo 结构体,用于存储文件名和修改时间。然后,它使用 opendirreaddir 函数读取目录中的文件,并使用 stat 函数获取文件的修改时间。接下来,它使用 qsort 函数根据修改时间对文件进行排序。最后,它打印出按修改时间排序后的文件列表。

请注意,这个示例程序仅适用于包含少于 100 个文件的目录。你可以根据需要调整 files 数组的大小。

0
看了该问题的人还看了