Как отсортировать файлы в каком-либо каталоге по именам в Linux - PullRequest
11 голосов
/ 24 февраля 2011

Я использую opendir() и readdir() для отображения имен файлов в каталоге. Но они беспорядочные. Как я могу их отсортировать? Язык C.

Ответы [ 3 ]

27 голосов
/ 24 февраля 2011

Может быть, вы могли бы использовать 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);
   }
}
7 голосов
/ 24 февраля 2011

Идиоматический способ сортировки чего-либо в C состоит в использовании функции qsort(). Чтобы это работало, лучше всего, если вы можете собрать все имена файлов в массив указателей, а затем отсортировать массив.

Это не слишком сложно, но для этого требуется либо немного управления динамическими массивами, либо ввод статических ограничений на вещи (максимальная длина имен файлов, максимальное количество файлов).

0 голосов
/ 24 февраля 2011

Вы должны динамически построить структуру данных, содержащую имена файлов и убедиться, что она отсортирована.

Вы можете создать массив или связанный список с именами, а затем отсортировать их, но я предпочитаю сортироватьзначения при вставке путем вставки в двоичное дерево.

...