【问题标题】:How to sort files in some directory by the names on Linux如何在Linux上按名称对某个目录中的文件进行排序
【发布时间】:2011-07-03 10:30:09
【问题描述】:

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

【问题讨论】:

  • @Christoffer Hammarström:对不起,我忘了说我必须使用 C
  • 你应该添加C标签。
  • 这比看起来更难,因为 Unix 按惯用顺序对文件进行排序,即 p5A 排在 p10A 和 p50A 之前。除非您将文件重命名为 p05A,否则您的字母排序将无法获得按名称排序的优点。

标签: c linux file sorting scandir


【解决方案1】:

也许您可以使用 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);
   }
}

【讨论】:

【解决方案2】:

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

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

【讨论】:

  • scandir 为您完成这项工作。唯一不好的是你不能使用文件描述符指定目录。你必须传递名字。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 2011-07-12
    相关资源
    最近更新 更多