C++中如何深度搜尋遍曆檔案夾

來源:互聯網
上載者:User

深度優先搜尋遍曆檔案夾所有檔案, 由於使用windows的函數, 必須要使用C語言;

注意字元集的問題,使用"#undef UNICODE", 屏蔽因字元集所產生的問題;

使用vector<string>儲存所有檔案名稱, 因為要遞迴使用, 所以需要設定為靜態,返回shared_ptr的指標

代碼如下:

/************************************************* File: main.cpp Copyright: C.L.Wang Author: Caroline Date: 2013-11-27 Description: 深度優先遞迴遍曆目錄中所有的檔案 Email: morndragon@126.com **************************************************/      #undef UNICODE        #include <iostream>  #include <string>  #include <vector>  #include <memory>  #include <cstring>        #include <windows.h>        std::shared_ptr<std::vector<std::string> >  fileList(const std::string& folder_path)  {      static std::shared_ptr<std::vector<std::string> >           folder_files(new std::vector<std::string>); //返回指標, 需要迭代使用            WIN32_FIND_DATA FindData;      HANDLE hError;            int file_count(0);      std::string file_path(folder_path); //路徑名      std::string full_file_path; //全路徑名             file_path.append("/*.*");      hError = FindFirstFile(file_path.c_str(), &FindData);      if (hError == INVALID_HANDLE_VALUE) {          std::cout << "failed to search files." << std::endl;          return nullptr;      }      while(FindNextFile(hError, &FindData))      {          //過慮".", "..", "-q"          if(0 == strcmp(FindData.cFileName, ".") ||               0 == strcmp(FindData.cFileName, "..") ||               0 == strcmp(FindData.cFileName, "-q"))          {              continue;          }                //完整路徑          full_file_path.append(folder_path);          full_file_path.append("/");          full_file_path.append(FindData.cFileName);          ++file_count;                if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){              //std::cout << file_count << " " << full_file_path << "<Dir>" << std::endl;              fileList(full_file_path);          }else{              folder_files->push_back(full_file_path);              //std::cout << file_count << " " << full_file_path << std::endl;          }          full_file_path.clear(); //清空目錄      }      return folder_files;  }        int main(void)   {      std::shared_ptr<std::vector<std::string> > folder_files;      folder_files = fileList("E:/Picture/shoes3");      if (folder_files) {          for (size_t i=0; i != folder_files->size(); ++i) {              std::cout << i+1 << " : " << (*folder_files)[i] << std::endl;          }      }      return 0;  }

作者:csdn部落格 Spike_King

更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。