难点在于合成递归所需要的路径,因为运行程序的目录没有改变,所以需要不断合成下次递归所需要的路径。
整体思路:递归寻找子文件,回溯输出文件名
注意事项:合成路径有没有多'/'或少'/'
遇到 . 或 .. 时要跳出,防止无限递归
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
//para of opendir para of readdir para of Synthesis PATH
void recursion(DIR *stream, struct dirent *p, char *str)
{
//Recursive Basis
if(stream == NULL)
return ;
//Infinite Loop to print filename
while(1)
{
//get stucure of file
p = readdir(stream);
if(p == NULL)
return ;
if(p->d_name[0] == '.') //prevent backtracking
continue;
char buf[50]; //Be use for save PATH
sprintf(buf, "%s/%s", str, p->d_name); //systhesis PATH
DIR *s = opendir(buf); //get recursion para
s = opendir(buf); //get recursion para
recursion(s, p, buf); //recursion
printf("%s\n", p->d_name); //Regression output
}
}
int main(int argc, const char *argv[])
{
DIR *s = opendir("./testdir"); //Parent filename
if(s == NULL)
return 0;
struct dirent *p = NULL; //Initialize dir-structure
recursion(s, p, "./testdir"); //Enter Recursion
return 0;
}
运行截图: