Насколько я понял рекурсивный - потому что с обходом дерева каталогов. Т.е. нужно просто перейти к следующему файлу - если это подкаталог - то к первому файлу подкаталога...
Если бы просто надо было получить список всех файлов - то это была бы рекурсивная функция!
А т.к. надо получить следующий файл, надо запоминать данные в виде массива с текущими позициями в каждом каталоге. В самом тупом виде будет примерно следующее
Код
unsigned level;
DIR last;
unsigned dir_pos[MAX_LEVEL];
char* get_next_file(void)
{
while(1) {
f_readdir(&last,...);
если подкаталог {
++level;
f_opendir(&last,...)
continue;
}
если конец {
dir_pos[level]=0;
--level;
открыть каталог верхнего уровня
пропустить dir_pos[level] файлов
continue;
}
++dir_pos[level];
return имя файла
}
}