Сохранение результатов поиска по каталогу функции ftw - PullRequest
1 голос
/ 23 октября 2011

что мне нужно сделать, это рекурсивно получить архивы ".mp3" из определенного предварительно определенного каталога и его подкаталогов.У меня не было проблем с получением mp3 и печатью их на консоли.Я использую функцию ftw, указанную в http://www.gnu.org/software/libc/manual/html_node/Working-with-Directory-Trees.html#Working-with-Directory-Trees,, ее функция обратного вызова будет выглядеть следующим образом:

/* 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-файлы, но я понятия не имею, как сохранить результаты, чтобы загрузить их в комбинированное окно в другой функции.Я не хочу использовать глобальные переменные ... Я новичок в этом, заранее спасибо за вашу помощь.

1 Ответ

0 голосов
/ 23 октября 2011

Если обратный вызов не имеет аргумента клиента (обычно void *), который, как представляется, имеет место, вам придется поместить найденные данные в глобальную переменную, что является неудачным. Если это проблема (т. Е. Вы находитесь в многопоточной среде), вам придется реализовать собственную версию рекурсивного обхода каталога с использованием интерфейса opendir. Это не сложно.

...