Chinaunix
标题:
我的linux代码不能遍历所有目录,求助大神们
[打印本页]
作者:
x6666f
时间:
2011-08-16 16:03
标题:
我的linux代码不能遍历所有目录,求助大神们
我的linux代码不能遍历所有目录,求助
代码很简短,不知为何却不能遍历所有目录,请大神看看
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<dirent.h>
void dirls(DIR *dirp,int num);
int main(int argc,char **argv)
{
ssize_t readnum;
DIR *dirp;
struct dirent *direntp;
if(argc<2)
return 0;
dirp=opendir(argv[1]);
dirls(dirp,1);
return 0;
}
void dirls(DIR *dirp,int num)
{
struct dirent *direntp;
while(NULL != (direntp=readdir(dirp)))
{
DIR *dir;
fprintf(stdout,"%d %s \n",num,direntp->d_name);
if(0!=strcmp(direntp->d_name,".")&&0!=strcmp(direntp->d_name,"..")&&NULL!=(dir=opendir(direntp->d_name)))
{
fprintf(stdout,"\n***********************%s*******************************\n",direntp->d_name);
dirls(dir,num+1);
fprintf(stdout,"\n#######################%s##################################\n",direntp->d_name);
}
}
closedir(dirp);
}
复制代码
作者:
linuxqie
时间:
2011-08-16 16:10
建议用递归实现!~~~
作者:
jiayanfu
时间:
2011-08-16 17:11
本帖最后由 jiayanfu 于 2011-08-16 17:46 编辑
原因在于楼主对于opendir的参数不对,打开上级或者下级的目录的时候,那个路径给的不对。采用相对路径的话,可能稍微复杂点。。。如果采用绝对路径的话,如果查找的是子目录的话应该将该本目录路径加到opendir的参数里边,而不是用readdir获取到的目录名。。。。
见下面代码。。。
作者:
jiayanfu
时间:
2011-08-16 17:35
本帖最后由 jiayanfu 于 2011-08-16 17:42 编辑
采用绝对路径,代码修改结果{:2_168:}
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<dirent.h>
void dirls(DIR *dirp,int num,char *pPath); //修改点1:增加路径参数
int main(int argc,char **argv)
{
ssize_t readnum;
DIR *dirp;
struct dirent *direntp;
if(argc<2)
return 0;
dirp=opendir(argv[1]);
dirls(dirp,1,argv[1]);
return 0;
}
void dirls(DIR *dirp,int num,char *pPath)
{
struct dirent *direntp;
while(NULL != (direntp=readdir(dirp)))
{
DIR *dir;
fprintf(stdout,"%d %s \n",num,direntp->d_name);
//修改点2:增加路径参数
char chTempDir[1024];
memset(chTempDir,0,sizeof(chTempDir));
sprintf(chTempDir,"%s//",pPath);
strcat(chTempDir,direntp->d_name);
if(0!=strcmp(direntp->d_name,".")&&0!=strcmp(direntp->d_name,"..")&&NULL!=(dir=opendir(chTempDir)))
{
fprintf(stdout,"\n***********************%s*******************************\n",direntp->d_name);
dirls(dir,num+1,chTempDir);
fprintf(stdout,"\n#######################%s##################################\n",direntp->d_name);
}
}
closedir(dirp);
}
复制代码
作者:
x6666f
时间:
2011-08-16 18:45
回复
4#
jiayanfu
谢了啊
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2