如何通过Linux上的名称对某些目录中的文件进行排序

时间:2011-02-24 09:43:47

标签: c linux file sorting scandir

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

3 个答案:

答案 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)

您必须动态构建包含文件名的数据结构,并确保它已排序。

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