C で記述されたファイルを一覧表示する単純なプログラムがあります。このコードに何を追加すれば、ファイルが並べ替えられた順序で出力されるのでしょうか? ありがとう
while ((directory = readdir(dir)) != NULL)
{
printf("%s\n", directory->dir_name);
}
最初に名前を配列に格納する必要があります。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]);
}
readdir()
ソート順を保証するものではありません。ソートされ
た順序
でリストが必要な場合は、それを行うためのコードを作成する必要があります。つまり、配列内のすべてのファイル名を収集し、並べ替えの基準に応じてその配列を並べ替えます。
Linux プラットフォームではscandir()を使用できます。
qsort() を検索して使用することをお勧めします。標準ライブラリで提供されている他の便利な並べ替え API に出くわすこともあるでしょう。