按字母顺序降序排序文件

时间:2016-06-22 17:22:26

标签: c

我正在尝试修改此文件https://github.com/HaarigerHarald/omxiv/blob/master/omxiv.c,我认为它是函数getImageFilesInDir。我需要更改它,因此它将按字母顺序升序返回目录中的文件,但按字母顺序降序排列(img05.png,img04.png,img03.png,img02.png,img01.png),因此图像查看器将显示我是第一个具有最大数量的文件(在我的情况下是img05.png)

我试过像for(i=0; i-1; i--)这样的东西,但没有用。 不知道请问怎么做?

static int getImageFilesInDir(char ***list, const char* path){
    struct dirent **namelist;
    int imageNum;
    imageNum = scandir(path, &namelist, imageFilter, alphasort);
    if (imageNum < 0)
        return imageNum;
    else {
        *list=malloc(sizeof(char*) *imageNum);
        int i;
        for(i=0; i<imageNum; i++) {
            if(strcmp(path, ".") == 0 || strcmp(path, "./") == 0){
                (*list)[i]= malloc(strlen(namelist[i]->d_name)+1);
                strcpy((*list)[i], namelist[i]->d_name);
            }else{
                if(strrchr(path, '/')- path != strlen(path)-1){
                    (*list)[i]= malloc(strlen(path)+strlen(namelist[i]->d_name)+2);
                    strcpy((*list)[i],path);
                    (*list)[i][strlen(path)]='/';
                    strcpy((*list)[i]+strlen(path)+1,namelist[i]->d_name);
                }else{
                    (*list)[i]= malloc(strlen(path)+strlen(namelist[i]->d_name)+1);
                    strcpy((*list)[i],path);
                    strcpy((*list)[i]+strlen(path),namelist[i]->d_name);
                }
            }
            free(namelist[i]);
        }
        free(namelist);
    }
    return imageNum;
}

(这是我与C的第一次接触)

1 个答案:

答案 0 :(得分:3)

您只需要给scandir()一个比较回调,该回调对alphasort()的作用负面。你可以直接否定alphasort()输出:

int descalphasort(const struct dirent **a, const struct dirent **b)
{
    return - alphasort(a, b);
}

或者正如@chux指出的那样,反转alphasort()参数:

int descalphasort(const struct dirent **a, const struct dirent **b)
{
    return alphasort(b, a);
}

descalphasort来电时使用scandir()代替alphasort