1

我有一个简单的程序,列出了用 C 编写的文件。我只是想知道我可以在这段代码中添加什么,以便文件按排序顺序打印出来?谢谢

while ((directory = readdir(dir)) != NULL)
{
   printf("%s\n", directory->dir_name);
}
4

3 回答 3

2

您必须首先将名称存储在数组中,MAXDIRS 是最大目录数(或者您可以使用calloc动态分配数组)

#include <string.h>
#include <stdio.h> 
#include <stdlib.h> 

char dirs[MAXDIRS][512]; // you have to ensure correct allocation (eg names < 512 chars)
int ndirs = 0; // number of dirs

while ((directory = readdir(dir)) != NULL) {
   strcpy(dirs[ ndirs++ ], directory->d_name);
}

// Then sort the directories

// need a sorting function
int comp(void const *a, void const *b) { 
    char const *u = (char const *)a;
    char const *v = (char const *)b;

    return strcmp(u, v);
}

// use qsort to sort the dirs
qsort (dirs, ndirs, sizeof(dirs[0]), comp);

dirs现在包含一个排序的目录数组

// display

int i;

for (i=0 ; i<ndirs ; i++) {
  printf("%s\n", dirs[i]);
}
于 2013-02-03T15:45:22.737 回答
1

readdir()不保证您有任何排序顺序。
如果您需要按任何排序顺序列出清单,则必须编写代码来执行此操作。简而言之,将所有文件名收集到一个数组中,然后根据您的排序标准对该数组进行排序。

您可以在 linux 平台上使用scandir() 。

于 2013-02-03T15:38:09.833 回答
0

我建议您查找 qsort() 并使用它。您可能还会偶然发现标准库提供的其他一些有用的排序 API。

于 2013-02-03T15:42:07.840 回答