我使用opendir()
和readdir()
来显示目录中的文件名。但他们是无序的。我怎么能对它们进行排序?语言是C。
答案 0 :(得分:27)
也许你可以使用scandir()而不是opendir和readdir?
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
int
main(void)
{
struct dirent **namelist;
int n;
n = scandir(".", &namelist, 0, alphasort);
if (n < 0)
perror("scandir");
else {
while (n--) {
printf("%s\n", namelist[n]->d_name);
free(namelist[n]);
}
free(namelist);
}
}
答案 1 :(得分:7)
在C中对事物进行排序的惯用方法是使用qsort()
函数。为了实现这一点,最好安排将所有文件名收集到一个指针数组中,然后对数组进行排序。
这不是太难,但它确实需要一些动态数组管理,或者你需要对事物引入静态限制(文件名的最大长度,最大文件数)。
答案 2 :(得分:0)
您必须动态构建包含文件名的数据结构,并确保它已排序。
您可以使用名称构建数组或链接列表,然后对其进行排序,但我的首选是通过插入二叉树来对插入值进行排序。