我在我的一个C程序中使用scandir()函数。在scandir()中,我要求它对我的目录进行alphasort。然而,当我有像alpha,bob这样的文件时,它们被放置在像DARK或Decomp.txt这样的文件下。我认为这是因为ascii值的工作原理。但是有没有方法让我的排序是:alpha,bob,DARK,decomp.txt而不是DARK,Decomp.txt,alpha,bob。
因为基本上我应该对树unix命令进行建模,并且需要以这种方式对其进行排序。
下面的代码只显示了我的打印方式。
void listdir(const char *name, int level, int hidden, int access)
{
DIR *dir;
struct dirent **entry;
int n = 2;
int num;
char path[1024];
int len;
int count = 0;
if (!(dir = opendir(name)))
{
printf("%s [error opening dir]\n", name);
return;
}
num = scandir(name,&entry,NULL,alphasort);
if(num<0)
{
perror("scandir");
}
while(n<num){
/* Bunch of formatting to print files/directory */
/* Pseudocode */
/* if( it is a directory)
print current directory
recursive call on function
else
print current file */
n++;
}
closedir(dir);
}
答案 0 :(得分:1)
类似的东西:
#include <strings.h>
int alphasort_case_insensitive(const struct dirent ** a, const struct dirent **b) {
return(strcasecmp((*(const struct dirent **)dirent1)->d_name,
(*(const struct dirent **)dirent2)->d_name));
}