转
http://sinsonglew.blog.sohu.com/136638038.html
处理数据的时候,我们经常需要搜索某一路径下的所有含有关键字的文件。以下是自己的整理代码,希望可以给大家提供某些参考。
#include <iostream>
using namespace std;
#include <string>
#include <vector> // 这个是VC里封装的容器类,功能类似数组
#include <windows.h>
/*************************定义宏***********************************************/
#define In_Dir "H:\\data" // 数据输入路径
#define szFilter "\\*.*" // 搜索文件的扩展名
/*************************定义全局变量******************************************/
vector<string> szPath; // 存储文件名的容器
void Find_Keyword_File(const char *strPath) // strPath = In_Dir
{
WIN32_FIND_DATA FindFileData;
char szFind[MAX_PATH];
strcpy(szFind,strPath);
strcat(szFind,szFilter);
HANDLE hFind = FindFirstFile(szFind,&FindFileData);
if(INVALID_HANDLE_VALUE == hFind)
return;
while(true)
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(strcmp(FindFileData.cFileName,".") && strcmp(FindFileData.cFileName,".."))
{
string szFile;
szFile = strPath;
szFile = szFile + "\\";
szFile = szFile + FindFileData.cFileName;
Find_Keyword_File(szFile.c_str());
}
}
else
{
string strFile = FindFileData.cFileName;
string strTmp = strPath;
strTmp = strTmp + "\\";
// 搜索文件名中含"Soil"和"img"字样的文件
if(strFile.find("Soil") != strFile.npos && strFile.find("img") != strFile.npos)
{
szPath.push_back(strTmp + strFile); // 将搜索到文件的全路径存贮到szPath中
}
}
if(!FindNextFile(hFind,&FindFileData)) break;
}
FindClose(hFind);
}
/*******************************主函数调用**********************************/
void main()
{
Find_Keyword_File(In_Dir);
cout<<"OK,Wating....................."<<endl;
}