2013-02-03 23 views
0

我有一個簡單的程序,列出用C編寫的文件。我只是想知道我可以添加到這個代碼,以便按照排序順序打印文件?由於在C中的列表文件

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

你是什麼意思?分揀訂單?按名稱按大小? –

+0

存儲條目,對其進行分類,然後將其打印出來。 –

+0

我想按文件名對它們進行排序。 –

回答

1

你必須先名稱存儲在數組中,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]); 
} 
+1

謝謝你的幫助! –

+0

好的;我以前的意見不相關。包裝成可編譯的代碼,答案中的片段正常工作。 –

1

readdir()並不能保證你任何排序順序。
如果您需要的任何排序順序列表,您將不得不編寫代碼。簡而言之,收集數組中的所有文件名,然後根據您的排序條件對數組進行排序。

您可以在Linux平臺上使用scandir()

+0

嗨,我想按名稱或大小排序它們。謝謝。 –

+0

請注意['scandir()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/scandir.html)是一個POSIX函數。 IIRC,Mac OS X實現和POSIX實現之間有區別,但它也存在於Mac OS X上。 –

+0

@KevenDiuliy:如果你想按大小排序,那麼你必須使用'stat()'函數來獲取大小,並且你必須存儲名稱和大小,按大小排序,然後相應地打印。 –

0

我建議你查找qsort()並使用它。您可能會偶然發現標準庫提供的其他一些有用的排序API。