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應該也有類似的函數吧,這個我就么有用過了,你找找。

慕沐林林
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); } |
- 2 回答
- 0 關注
- 388 瀏覽
添加回答
舉報
0/150
提交
取消