为了账号安全,请及时绑定邮箱和手机立即绑定

想了解一下,在C/C++中的readdir遍历目录中的子目录的问题?

想了解一下,在C/C++中的readdir遍历目录中的子目录的问题?

哆啦的时光机 2021-06-22 18:14:24
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);} elsecontinue;}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是并列的两个目录,这种错误该怎么改,急等大大们在线帮解决
查看完整描述

2 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

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

查看完整回答
反对 回复 2021-06-27
?
慕沐林林

TA贡献2016条经验 获得超9个赞


           else if(dirp->d_type & DT_REG)           {                sprintf(m_chTemp,"%s%s",dirpath,dirp->d_name); //----                printf("m_chTemp = %s\n",m_chTemp);           }


查看完整回答
反对 回复 2021-06-27
  • 2 回答
  • 0 关注
  • 350 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信