猿问

想了解一下,在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是并列的两个目录,这种错误该怎么改,急等大大们在线帮解决

哆啦的时光机
浏览 349回答 2
2回答

慕斯709654

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

慕沐林林

&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;}
随时随地看视频慕课网APP
我要回答