花时间写了个在cmd界面下搜索.exe的东东,网上参考了下别人的代码,主要就是一个递归算法吧,注意要搜索剪枝
#include
<
windows.h
>
#include
<
stdio.h
>
#include
<
string
.h
>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
int
isRoot(LPCTSTR lpszPath)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
TCHAR szRoot[4];
wsprintf(szRoot,"%c:/",lpszPath);
return lstrcmp(szRoot,lpszPath)==0?1:0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
int
isSpecificFile(LPCTSTR szfileName,LPCTSTR sztype)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
return strstr(szfileName,sztype)==NULL?0:1;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
void
FindInAll(LPCTSTR lpszPath)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
TCHAR szFind[MAX_PATH];
WIN32_FIND_DATA finddata;
HANDLE hFind;
lstrcpy(szFind,lpszPath);
if(!isRoot(szFind)) lstrcat(szFind,"/");
lstrcat(szFind,"*.*");
hFind=FindFirstFile(szFind,&finddata);
if(hFind==INVALID_HANDLE_VALUE) return;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
do
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if(finddata.cFileName[0]=='.') continue;
if (finddata.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
TCHAR szFile[MAX_PATH];
wsprintf(szFile,"%s/%s",lpszPath,finddata.cFileName);
FindInAll(szFile);
}
else
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (isSpecificFile(finddata.cFileName,".exe"))
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
printf("the filename is %s ",finddata.cFileName);
}
}
} while(FindNextFile(hFind,&finddata));
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
int
main(
int
argc,
char
*
argv[])
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
if (argc!=2) printf("usage:%s directory ",argv[0]);
else FindInAll(argv[1]);
return 0;
}
详细的解释: http://dev.21tx.com/2004/03/15/10414.html