Я делаю программу, которая печатает все dir и subdir с использованием библиотеки dirent.j, я подумал, что я использую рекурсивную функцию, которая делает то же самое для каждого нового пути, вот код:
void lisdir(const char *name, int indent)
{
DIR *dstr=opendir(name);
struct dirent *dentry;
while ((dentry=readdir(dstr))!=NULL){
if(dentry->d_type== DT_DIR){
char path[1024];
if (strcmp(dentry->d_name,".")==0 || strcmp(dentry->d_name,"..")==0)
continue;
snprintf(path, sizeof(path) ,"%s/%s", name, dentry->d_name);
printf("%s\n", dentry->d_name);
lisdir(path, indent+2);
}else{
printf("%s\n" , dentry->d_name);
}
}
closedir(dstr);
}
int main(void){
lisdir("/home/studente/homework", 0);
return 0;
}
дело в том, что это работает, но это не так, как я хочу, потому что, как только он находит тип DIR, он начинает работать с рекурсией, игнорируя другие файлы внутри фактического каталога, и только в конце он печатает другие файлы (последний printf) , но я хочу сортировку, например: сначала каталог, а затем весь его файл, второй каталог, а затем все файлы ... e cc .., есть ли способ сделать это? спасибо!