13

我使用opendir()andreaddir()来显示目录中的文件名。但他们是无序的。我怎样才能对它们进行排序?语言是C。

4

3 回答 3

32

也许您可以使用 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);
   }
}
于 2011-02-24T10:41:55.570 回答
8

在 C 中对某些内容进行排序的惯用方法是使用qsort()函数。为此,最好安排将所有文件名收集到一个指针数组中,然后对数组进行排序。

这不是太难,但它确实需要一些动态数组管理,或者您对事物引入静态限制(文件名的最大长度,文件的最大数量)。

于 2011-02-24T12:37:58.767 回答
0

您必须动态构建包含文件名的数据结构并确保对其进行排序。

您可以使用名称构建一个数组或链表,然后对其进行排序,但我的偏好是通过插入二叉树来对插入的值进行排序。

于 2011-02-24T14:39:27.957 回答