使用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;
}
答案 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);
}