Что мне нужно сделать, это рекурсивно получить архивы «.mp3» из определенного заранее заданного каталога и его подкаталогов. У меня не было проблем с получением mp3 и их печать на консоли. Я использую функцию FTW, указанную в http://www.gnu.org/software/libc/manual/html_node/Working-with-Directory-Trees.html#Working-with-Directory-Trees, его функция обратного вызова будет выглядеть следующим образом:Сохранение результатов поиска в каталоге функции ftw
/* Call-back of ftw function*/
int filter_mp3s(const char *dir_name, const struct stat *status, int typeflag){
if (typeflag == FTW_D){
struct dirent **mp3list;
int num_archives;
int counter;
num_archives = scandir (dir_name, &mp3list, select_mp3_ext, alphasort);
/* print mp3 names */
if (num_archives > 0) for (counter = 0; counter <= num_archives - 1; counter++) printf("%s\n", mp3list[counter]->d_name);
}
return 0;
}
То, что я действительно хочу сделать, это поместить имена файлов в комбо-боксе виджет GTK. Проблема в том, что функция возвращает тип int, и функция не является гибкой с ее параметрами, поэтому я могу «сохранить» что-то в записи. Другими словами, найдены mp3, но я не знаю, как сохранить результаты, чтобы загрузить их в поле со списком в другой функции. Я не хочу использовать глобальные переменные ... Я новичок в этом, заранее за вашу помощь.
Большое спасибо ... Ну, я сделал это с помощью скандинава, но все еще имею ту же проблему, что и его прототип: int scandir (const char * dir, struct dirent *** namelist, int (* selector) (const struct dirent *), int (* cmp) (const void *, const void *)) – PALEN
У него нет аргумента клиента ... Не могли бы вы рекомендовать мне просто использовать глобальную переменную или, возможно, создать временный файл? (извините за двойной пост, случайно нажал клавишу ввода) – PALEN
Я бы просто открыл, а затем readdir, вызвав вашу функцию рекурсивно. Затем вы передаете список найденных файлов и выполняете собственное сопоставление с расширением, затем помещаете соответствующие имена файлов в этот список. –