c++ 查找d:盘 中.exe的文件
来源:互联网 发布:linux 端口转发工具 编辑:程序博客网 时间:2024/06/06 04:00
#include <windows.h> #include <shlwapi.h> #include <iostream> #pragma comment(lib,"shlwapi.lib") using namespace std; //定义过滤器的最大数量 #define CONST_MAX_FILTER 16 //链表的数据结构 typedef struct tagList{ TCHAR szFile[MAX_PATH]; struct tagList *NextFile; }FileList, *PFileList; //主体类 class CHunter{ public: CHunter(); ~CHunter(); void AddFilter( TCHAR *szFilter );//添加过滤器 void CHunter::Hunt( TCHAR *szPath ); TCHAR *GetFile();//取得链表中的文件 DWORD GetFileCount();//取得文件的数量 private: PFileList headNode;//链表头 PFileList currNode; void AddFile( TCHAR *szFile ); void HuntFile( char *lpPath ) ; TCHAR szFilter[CONST_MAX_FILTER][5] ; DWORD dwFilterCount ; DWORD dwFileCount ; }; CHunter::CHunter():dwFilterCount(0),dwFileCount(0) { headNode = (FileList *)malloc( sizeof(FileList) ); headNode->NextFile = NULL; currNode = headNode; for(int i=0; i< CONST_MAX_FILTER; i++) ZeroMemory( szFilter[i], 5 ) ; } CHunter::~CHunter() { PFileList next, tmp; tmp = headNode; while( tmp->NextFile != NULL ) { next = tmp->NextFile ; free(tmp); tmp = next; } free(tmp); } //添加过滤器,比如.txt,为了简省,没有考虑文件扩展名长度大于4的情况 //请自行修改 void CHunter::AddFilter( TCHAR *szInp ) { if( strlen(szInp) > 4 ) return; strncpy( szFilter[dwFilterCount++], szInp, 5 ); } void CHunter::AddFile( TCHAR *szFile ) { currNode->NextFile = (FileList *)malloc( sizeof(FileList) ); currNode = currNode->NextFile; ZeroMemory(currNode->szFile, MAX_PATH ); currNode->NextFile = NULL ; strncpy( currNode->szFile, szFile, MAX_PATH ); dwFileCount++; } //这是入口函数,调用它即可开始搜索,这个路径的尾部不应有反斜杠 void CHunter::Hunt( TCHAR *szPath ) { HuntFile( szPath ); currNode = headNode->NextFile; } DWORD CHunter::GetFileCount() { return this->dwFileCount; } //这个函数依次遍历链表中的文件,并返回一个文件名 TCHAR *CHunter::GetFile() { TCHAR *szRet; szRet = currNode->szFile; currNode = currNode->NextFile; return szRet; } void CHunter::HuntFile(char * lpPath) { char szFind[MAX_PATH]; char szFile[MAX_PATH]; WIN32_FIND_DATA FindFileData; ZeroMemory(szFind,MAX_PATH); ZeroMemory(szFile,MAX_PATH); strcpy(szFind,lpPath); strcat(szFind,"\\*.*"); HANDLE hFind=::FindFirstFile(szFind,&FindFileData); if(INVALID_HANDLE_VALUE == hFind) return; while(TRUE) { if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if(FindFileData.cFileName[0]!='.') { strcpy(szFile,lpPath); strcat(szFile,"\\"); strcat(szFile,FindFileData.cFileName); HuntFile(szFile); } } else { strcpy(szFile,lpPath); strcat(szFile,"\\"); strcat(szFile,FindFileData.cFileName); //cout << szFile << FindFileData.cFileName << endl; for( int i=0; i< dwFilterCount; i++ ) if( strncmp(szFilter[i], PathFindExtension(szFile), 5) == 0 ) this->AddFile( szFile ); } if(!FindNextFile(hFind,&FindFileData)) break; } FindClose(hFind); } //示例,搜索D盘所有的exe文件 int main(int argc, char* argv[]) { CHunter hunter; hunter.AddFilter(".exe"); hunter.Hunt("D:"); cout<< hunter.GetFileCount() << endl; for(int i=0; i< hunter.GetFileCount(); i++) cout<< hunter.GetFile() << endl; return 0; }
- c++ 查找d:盘 中.exe的文件
- 电脑中快速查找文件的工具,UltraFileSearch.exe,
- 在EXE文件中查找指定字符串
- java中调用C语言生成的exe文件
- Objective C在目录中查找指定的文件
- 如何把C盘里的文件复制到D盘中?
- 查找指定目录下的.exe文件 并且将.exe文件按全路径保存
- shell:查找本目录所有C文件中具有abcdefg字符的.c文件
- 查找一个特定的EXE是否在内存中运行
- 查找一个特定的EXE是否在内存中运行
- 解决C和C++中生成的EXE文件执行后窗口就消失了!
- C/C++生成的exe文件如何传参数到main中
- 解决C语言中生成的EXE文件执行后窗口消失方法
- VS2010中配置C#Project不生成.vhost.exe和.pdb文件的方法
- 解决C语言中生成的EXE文件执行后窗口消失方法
- 在Visual Studio中给C语言工程的exe文件添加图标和版本说明
- VS2010中配置C#Project不生成.vhost.exe和.pdb文件的方法
- VB中获取EXE文件的版本号
- Fedora 18 装完后干的事
- 什么是异构计算
- HDU4571/2013年长沙赛区Travel in time
- sina kanyun 安装步骤
- POJ 2454 随机化+贪心
- c++ 查找d:盘 中.exe的文件
- POJ 1002 487-3279
- 关于hibernate.hbm2ddl.auto 属性
- fedora18 fedora17安装显卡驱动和网卡驱动
- 2013年6月3日 21:43:09
- 版本控制工具
- 简单选择排序
- OpenCV中Mat类的图像如何设置ROI
- java有缺点,python也是!!