我有一個簡單的程序,列出用C編寫的文件。我只是想知道我可以添加到這個代碼,以便按照排序順序打印文件?由於在C中的列表文件
while ((directory = readdir(dir)) != NULL)
{
printf("%s\n", directory->dir_name);
}
我有一個簡單的程序,列出用C編寫的文件。我只是想知道我可以添加到這個代碼,以便按照排序順序打印文件?由於在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()。
嗨,我想按名稱或大小排序它們。謝謝。 –
請注意['scandir()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/scandir.html)是一個POSIX函數。 IIRC,Mac OS X實現和POSIX實現之間有區別,但它也存在於Mac OS X上。 –
@KevenDiuliy:如果你想按大小排序,那麼你必須使用'stat()'函數來獲取大小,並且你必須存儲名稱和大小,按大小排序,然後相應地打印。 –
我建議你查找qsort()並使用它。您可能會偶然發現標準庫提供的其他一些有用的排序API。
你是什麼意思?分揀訂單?按名稱按大小? –
存儲條目,對其進行分類,然後將其打印出來。 –
我想按文件名對它們進行排序。 –