我如何使用scandir,以便它只填充我的struct dirent ** namelist,带文件夹?
答案 0 :(得分:3)
您可以通过提供过滤函数来过滤要列出的实体,如果要将文件包含在列表中,则该函数应返回非零值。
不幸的是,dirent
结构的成员不会告诉您是否有目录(尽管your system might include a type field),因此您必须使用其他方法来查找目录,例如{ {1}}:
stat
您还可以尝试在名称上调用#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>
int filter_dir(const struct dirent *e)
{
struct stat st;
stat(e->d_name, &st);
return (st.st_mode & S_IFDIR);
}
并检查成功。 (但如果成功,请不要忘记关闭它。)
这适用于当前目录,因为名称不包括路径。过滤器也没有提供用于传递附加数据的插槽,因此您可以做的最好的事情是定义一个保存路径的全局变量,并且必须事先设置它。
这是一个包装函数opendir
:
scandir_dir