C++ 檔案型別判別錯誤,將目錄檔案識別為普通檔案
阿新 • • 發佈:2021-11-12
場景:
我使用Linux作業系統的時候,自己的虛擬機器能夠正常判斷檔案型別,而且同一臺電腦之前幾次都能正確識別檔案型別,但這一次識別檔案型別錯誤。單步除錯,檔名能夠正常被讀取。下面的函式中除了"."和".."的目錄能夠正常識別以外,其餘目錄檔案全被識別為普通檔案(ptr->d_type為0)。
程式碼如下:
std::vector<std::string> folderList; DIR *dir; struct dirent *ptr; std::string allPath = path; //檔案或檔案的完整路徑 if ((dir=opendir(allPath.c_str())) == NULL){ zout<<"open dir error:"<<allPath << endl; std::perror("error info:"); return folderList; } while ((ptr=readdir(dir)) != NULL){ if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"..")==0) ///current dir OR parrent dir continue; elseif(ptr->d_type == 4){ //若為目錄檔案則返值為,普通檔案則為0 folderList.push_back(ptr->d_name); } } std::sort(folderList.begin(), folderList.end()); closedir(dir); return folderList;
產生原因:
硬碟所在的目錄未被掛載成功。
檢視磁碟情況:
檢視磁碟情況:df -h(發現無對應磁碟)
檢視裝置情況: ls /dev/md*
解決方法:
命令列輸入:mount /dev/md127(裝置路徑) /mnt/store(檔案和目錄所在路徑),即將"/dev/md127"裝置掛載在"/mnt/store"路徑下的。 問題得以解決。