我在制作递归目录列表时遇到的一个问题是,在递归函数的堆栈中没有调用目录检查后的调用。
void direct_crawl(int indent, char *cwd, STAT nstat)
{
int i, i_in, count;
struct direct **files;
int file_comp();
count = scandir(cwd, &files, file_comp, alphasort);
for (i = 0; i < count; i++)
{
for (i_in = 0; i_in < indent; i_in++)
printf("\t");
printf("%s\n", files[i]->d_name);
stat(files[i], nstat);
if (S_ISDIR(nstat->st_mode) != 0)
direct_crawl(indent + 1, files[i]->d_name, nstat)
}
}
它上升到一个子目录,但如果这些目录有子目录,它就不会打扰......所以,有人可以解释一下我做错了吗?感谢。
答案 0 :(得分:0)
你做错了的是,即使在子目录中,你只用一个文件名调用stat()
,在当前目录而不是子目录中搜索,因此stat()
失败。如果您在chdir(cwd)
循环之后拨打chdir("..")
并for
之后,它可能会有效。