gpt4 book ai didi

c - 按字母降序对文件进行排序

转载 作者:行者123 更新时间:2023-11-30 20:04:41 25 4
gpt4 key购买 nike

我正在尝试修改此文件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)

最佳答案

您只需为 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);
}

并在 scandir() 调用中使用 descalphasort 而不是 alphasort

关于c - 按字母降序对文件进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37974593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com