採用正則表示式獲取某路徑下符合特定模式字串的檔名
阿新 • • 發佈:2019-02-05
#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();
}