使用c中的scandir()以升序打印目录

时间:2014-10-24 16:45:06

标签: c

使用scandir()时,它使用alphasort以相反的顺序对目录内容列表进行排序。现在,如何使用c。

中的scandir()按升序打印目录

...必须在最顶层。

以下是代码:


#include<stdio.h>
#include <dirent.h>
#include<string.h>
#include<sys/dir.h>
#include<malloc.h>
int main(void)
{
   struct dirent **namelist;
   int n;

   n = scandir(".", &namelist,NULL,alphasort);
   if (n < 0)
      perror("scandir");
   else {
      while (n--) {
         printf("%s\n", namelist[n]->d_name);
         free(namelist[n]);
      }
      free(namelist);
   }
 return 0;
}

2 个答案:

答案 0 :(得分:8)

当您致电alphasort时,它会按升序对条目进行排序。

在您的代码中,您以相反的顺序打印它。

要按升序打印,您需要从索引0开始。


例如:

#include<stdio.h>
#include <dirent.h>
#include<string.h>
#include<sys/dir.h>
int main(void)
{
   struct dirent **namelist;
   int n;
   int i=0;
   n = scandir(".", &namelist,NULL,alphasort);
   if (n < 0)
      perror("scandir");
   else {
      while (i<n) {
         printf("%s\n", namelist[i]->d_name);
         free(namelist[i]);
         ++i;
      }
      free(namelist);
   }
 return 0;
}

答案 1 :(得分:-1)

此程序将按升序打印目录

   #define _DEFAULT_SOURCE
   #include <dirent.h>
   #include <stdio.h>
   #include <stdlib.h>

   int
   main(void)
   {
       struct dirent **namelist;
       int n,k;

       n = scandir(".", &namelist, NULL, alphasort);
   k = scandir(".", &namelist, NULL, alphasort);


     while(k--){

    printf("%s\n", namelist[n-k-1]->d_name);
           free(namelist[n-k-1]);
}
       free(namelist[n-k-1]);


       exit(EXIT_SUCCESS);
   }