C++實現Linux和Windows下遍歷指定目錄下的檔案
阿新 • • 發佈:2019-02-07
一、Linux下遍歷方法
方法非常簡單,這裡不多說了,可以直接看程式碼這裡需要注意,由於p->d_name存放的是檔名,所以也可以通過像strstr(p->d_name,".jpg")等來判斷,遍歷指定型別的檔案。 資料夾中: 執行結果:#include <dirent.h>//遍歷系統指定目錄下檔案要包含的標頭檔案 #include <iostream> using namespace std; int main() { DIR* dir = opendir("/home/hanchao/picture");//開啟指定目錄 dirent* p = NULL;//定義遍歷指標 while((p = readdir(dir)) != NULL)//開始逐個遍歷 { //這裡需要注意,linux平臺下一個目錄中有"."和".."隱藏檔案,需要過濾掉 if(p->d_name[0] != '.')//d_name是一個char陣列,存放當前遍歷到的檔名 { string name = "/home/hanchao/picture/" + string(p->d_name); cout<<name<<endl; } } closedir(dir);//關閉指定目錄 }
二、Windows下遍歷指定目錄下所有檔案
同樣,直接看程式碼吧。這裡在Windows下尋找所有檔案也會有“.”和".."檔案,如果要遍歷目錄下的所有檔案,則需要過濾這兩個,過濾方法同Linux方法。 test原目錄下檔案: 執行結果:#include <io.h>//所需標頭檔案 #include <iostream> #include <string> using namespace std; void getAllFileNames(const string& folder_path) { _finddata_t file; long flag; string filename = folder_path + "\\*.jpg";//遍歷制定資料夾內的jpg檔案 if ((flag = _findfirst(filename.c_str(), &file)) == -1)//目錄內找不到檔案 { cout << "There is no such type file" << endl; } else { //通過前面的_findfirst找到第一個檔案 string name = folder_path + "\\" + file.name;//file.name存放的是遍歷得到的檔名 cout << name << endl; //依次尋找以後的檔案 while (_findnext(flag, &file) == 0) { string name = string(folder_path + "\\" + string(file.name)); cout << name << endl; } } _findclose(flag); } int main() { getAllFileNames("test");//test是制定的目錄 }