Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 保留ftw功能的目录搜索结果_C_Libc - Fatal编程技术网

C 保留ftw功能的目录搜索结果

C 保留ftw功能的目录搜索结果,c,libc,C,Libc,我要做的是从预先确定的目录及其子目录递归地获取.mp3归档文件。我在获取mp3并在控制台上打印它们时没有遇到问题。我正在使用中指定的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 **m

我要做的是从预先确定的目录及其子目录递归地获取.mp3归档文件。我在获取mp3并在控制台上打印它们时没有遇到问题。我正在使用中指定的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,但我不知道如何保存结果,以便将它们加载到其他函数的组合框中。我不想使用全局变量。。。
我不熟悉这一点,提前感谢您的帮助。

如果回调没有客户参数,通常是void*,情况似乎是这样,那么您必须将找到的数据放入全局变量,这是不幸的。
如果这是一个问题,即您处于多线程环境中,您必须使用opendir接口实现自己版本的递归目录遍历。这并不难。

非常感谢您。。。我使用scandir实现了这一点,但仍然存在相同的问题,因为它的原型是:int scandir const char*dir,struct dirent***name list,int*selector const struct dirent*,int*cmp const void*,const void*它也没有客户参数。。。你会建议我使用一个全局变量或者创建一个临时文件吗?很抱歉双重发布,不小心按了enter键,我将只是opendir,然后readdir递归调用您的函数。然后你传递找到的文件列表并进行扩展名匹配,然后将匹配的文件名放入该列表。我想这就是你想要的:最后,我使用一个全局变量找到了。非常感谢你的帮助!我解决了我的问题!