该功能搜索当前目录中的文件。如果它是一个目录,它会进入并再次搜索除当前“。”之外的文件。和前面的'..'目录。但它并不是我想要的。它没有进入下一个目录。
int foo(char *currDir)
{
struct dirent *direntp;
DIR *dirp;
char currentDir[250];
if ((dirp = opendir(currDir)) == NULL)
{
perror ("Failed to open directory");
return 1;
}
//By Sabri Mev at GYTE
while ((direntp = readdir(dirp)) != NULL)
{
printf("%s\n", direntp->d_name);
if(direntp->d_type == DT_DIR)
{
if(strcmp(direntp->d_name,".") !=0 && strcmp(direntp->d_name,"..") != 0)
foo(direntp->d_name); //Recursive!
}
}
getcwd(currentDir,250);
printf("curr Dir : %s\n",currentDir );
while ((closedir(dirp) == -1) && (errno == EINTR)) ;
return 0;
}
答案 0 :(得分:2)
因为您的路径错误。
试试这个
if(direntp->d_type == DT_DIR)
{
if(strcmp(direntp->d_name,".") !=0 && strcmp(direntp->d_name,"..") != 0)
{
sprintf(currentDir, "%s/%s", currDir, direntp->d_name);
foo(currentDir); //Recursive!
}
}
答案 1 :(得分:1)
当您在循环内对foo()进行递归调用时,请注意direntp-> d_name包含的内容不是完整路径,而只是子目录名称。你必须用currDir连接它并使用结果来调用foo()。
例如,如果你从foo(“/ home”)开始并且第一个子目录是“root”,那么当它应该是foo时,你将以递归方式调用foo(“root”)(“/ home / root “)。
答案 2 :(得分:0)
在direntp->d_name
中,您只访问本地目录名称,它不会返回整个路径
也不推荐使用getcwd
函数。改为使用符合ISO C ++的_getcwd
(如果你用C ++编写的话)。