在Linux中,你可以使用readdir函数来读取目录中的文件和子目录。要实现按文件大小排序,你需要将读取到的文件信息存储在一个结构体数组中,然后使用qsort函数对这个数组进行排序。以下是一个简单的示例:
#include <stdio.h> #include <stdlib.h> #include <dirent.h> #include <sys/stat.h> #include <string.h> typedef struct { char name[256]; off_t size; } FileInfo; int compare(const void *a, const void *b) { FileInfo *fileA = (FileInfo *)a; FileInfo *fileB = (FileInfo *)b; return (fileA->size > fileB->size) - (fileA->size < fileB->size); } int main() { DIR *dir; struct dirent *entry; FileInfo files[1024]; int count = 0; dir = opendir("."); if (dir == NULL) { perror("opendir"); return 1; } while ((entry = readdir(dir)) != NULL) { if (entry->d_type == DT_REG) { // 只处理普通文件 FileInfo fileInfo; snprintf(fileInfo.name, sizeof(fileInfo.name), "%s", entry->d_name); struct stat statbuf; if (stat(fileInfo.name, &statbuf) == 0) { fileInfo.size = statbuf.st_size; files[count++] = fileInfo; } } } closedir(dir); qsort(files, count, sizeof(FileInfo), compare); for (int i = 0; i < count; i++) { printf("%s: %ld bytes\n", files[i].name, files[i].size); } return 0; } 这个程序首先定义了一个FileInfo结构体,用于存储文件名和文件大小。然后,它使用opendir和readdir函数读取当前目录中的所有条目。对于每个条目,如果它是一个普通文件(而不是目录或其他类型的文件),则使用stat函数获取文件大小,并将其添加到files数组中。
接下来,使用qsort函数对files数组进行排序。compare函数用于比较两个FileInfo结构体的大小,以便qsort知道如何对它们进行排序。
最后,程序遍历排序后的files数组并打印文件名和大小。
注意:这个示例仅适用于处理当前目录中的文件。如果你想处理其他目录,可以将目录路径作为命令行参数传递给程序,并在opendir函数中使用该路径。