C/C++中的readdir遍历目录中的子目录的问题?

void listDir(char *dirpath)
{
DIR *dir = opendir((const char*)dirpath);
if(dir == NULL)
{
printf("open the log directory <%s> failure\n",dirpath);
return ;
}
struct dirent *dirp = NULL;
while((dirp = readdir(dir)) != NULL)
{
if(dirp->d_type & DT_DIR)
{
printf("dirpath = %s\n",dirpath);
if(dirp->d_name == NULL || dirp->d_name[0] == '.' || strcmp(dirp->d_name,"..") == 0)
continue;
sprintf(m_chTempPath,"%s%s/",dirpath,dirp->d_name);
listDir(m_chTempPath);
}
else if(dirp->d_type & DT_REG)
{
sprintf(m_chTemp,"%s%s",m_chTempPath,dirp->d_name);
printf("m_chTemp = %s\n",m_chTemp);

else
continue;
}
closedir(dir);
}
代码如上,目录结构如下:
/root/shanghai/jingan/xiaoming.txt /root/nanjing/xuanwu/tom.txt
/root/shanghai/changning/xiaohong.txt /root/nanjing/hexi/jack.txt
/root/shanghai/putuoxiaoli.txt /root/nanjing/baixia/may.txt
当我执行程序时,读目录结构会出错,比如会读成 /root/shanghai/jingan/changning,而jingan和changning是并列的两个目录,这种错误该怎么改,急等大大们在线帮解决

猛跑小猪
浏览 1019回答 2
2回答

拉丁的传说

这个要正对不同的操作系统,不同的操作系统,文件节点的存放方式不一样,读取的方式就不一样了。可以利用for循环,像Linux dir=opendir (dirname)打开文件夹,返回目录指针,dp=readdir(dir)利用读目录,返回一行行读取目录的文件结构体指针,指针中存的有文件属性,是文件,还是文件夹。通过判断是文件或者文件夹:如果是文件,就就输出文件名dp->name否则,就是一个文件夹 继续dir1=opendir(dp->name),dp1=readdir(dir1)..一直循环到判断不到目录了。windows应该也有类似的函数吧,这个我就么有用过了,你找找。

翻阅古今

12345&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(dirp->d_type&nbsp;&&nbsp;DT_REG)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(m_chTemp,"%s%s",dirpath,dirp->d_name);&nbsp;//----&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("m_chTemp&nbsp;=&nbsp;%s\n",m_chTemp);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}123456789101112131415161718192021222324252627282930以下代码,我测试正常的!你试试先,如有错,请上图void&nbsp;listDir(char&nbsp;*dirpath){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DIR&nbsp;*dir&nbsp;=&nbsp;opendir((const&nbsp;char*)dirpath);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(dir&nbsp;==&nbsp;NULL)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("open&nbsp;the&nbsp;log&nbsp;directory&nbsp;<%s>&nbsp;failure\n",dirpath);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;dirent&nbsp;*dirp&nbsp;=&nbsp;NULL;printf("dirpath&nbsp;=&nbsp;%s\n",dirpath);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while((dirp&nbsp;=&nbsp;readdir(dir))&nbsp;!=&nbsp;NULL)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(dirp->d_type&nbsp;&&nbsp;DT_DIR)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(dirp->d_name&nbsp;==&nbsp;NULL&nbsp;||&nbsp;dirp->d_name[0]&nbsp;==&nbsp;'.'&nbsp;||&nbsp;strcmp(dirp->d_name,"..")&nbsp;==&nbsp;0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(m_chTempPath,"%s%s/",dirpath,dirp->d_name);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listDir(m_chTempPath);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(dirp->d_type&nbsp;&&nbsp;DT_REG)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(m_chTemp,"%s%s",dirpath,dirp->d_name);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("m_chTemp&nbsp;=&nbsp;%s\n",m_chTemp);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;closedir(dir);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python