1. 程式人生 > >採用正則表示式獲取某路徑下符合特定模式字串的檔名

採用正則表示式獲取某路徑下符合特定模式字串的檔名

#include "FindFileNameAccordExpr.h" FindFileNameAccordExpr::FindFileNameAccordExpr(string dir, string exprStr) {     _dir = dir;     _searchString = exprStr;     _count = 0; } bool FindFileNameAccordExpr::find() {     if ( _dir == "" || _searchString == "")     {         cout<< "input parameter is null!" << endl;         return false;     }     boost::regex expression(_searchString);     boost::smatch what;     WIN32_FIND_DATA FindFileData;     HANDLE hFind;     int find = 1;     string filePath = _dir + "/" + "*.*";     //find all files in current dir, and save in the vector fileNames.      hFind = FindFirstFile(filePath.c_str(), &FindFileData);     string curFileName;     vector<string> fileNames;     if (hFind == INVALID_HANDLE_VALUE)      {         cout<< "Invalid File Handle. GetLastError reports:"<<GetLastError()<<endl;         return false;     }      else     {         fileNames.push_back(FindFileData.cFileName);         while(FindNextFile(hFind,&FindFileData)!=0)         {             if((FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)==0)               {                  cout<<"File Name is: "<<FindFileData.cFileName<<endl;                 curFileName = FindFileData.cFileName;                 fileNames.push_back(curFileName);             }         }         FindClose(hFind);     }     if(fileNames.empty())     {         cout<<"Warning>>> The Dir is empty."<<endl;         return false;     }     else     {         vector<string>::const_iterator pos;         for(pos=fileNames.begin(); pos<fileNames.end(); ++pos)         {             if (boost::regex_search(*pos, what, expression))             {                 cout <<"Current file name is match the expression, file name is: "<< what[0] <<endl;                 _vecfindStrs.push_back(what[0]);             }         }         if(_vecfindStrs.empty())         {             return false;         }         else         {             return true;         }     }     return true; } int FindFileNameAccordExpr::getCount() {     return _count; } vector<string>::const_iterator FindFileNameAccordExpr::getFirstIter() {     return _vecfindStrs.begin(); } vector<string>::const_iterator FindFileNameAccordExpr::getLastIter() {     return _vecfindStrs.end(); }