在C中列出文件

时间:2013-02-03 15:33:57

标签: c unix

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

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

3 个答案:

答案 0 :(得分: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]);
}

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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