#include <stdio.h>
#include <windows.h>
//用于保存搜索文件数的全局变量
long fileNum = 0;
//通过SearchFile返回的字符串搜索文件
void SearchExt(const char *fileRoad,const char *fileExt)
{
char absPath[MAX_PATH] = "";
WIN32_FIND_DATA wfd = {0};
HANDLE hFindFile = FindFirstFile(fileExt,&wfd);
if(!hFindFile) return;
do{
char *fileName = wfd.cFileName;
if(fileName[0] == '.' || !strcmp(fileName,"") )
//|| wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
continue;
fileNum++;
sprintf(absPath,"%s\\%s",fileRoad,fileName);
printf("%s\n",absPath);
}while(FindNextFile(hFindFile,&wfd));
}
//递归遍历文件夹
void SearchFile(const char *fileRoad,const char *fileExt)
{
char file[MAX_PATH] = "",
Ext[MAX_PATH] = "";
WIN32_FIND_DATA wfd = {0};
sprintf(file,"%s\\*.*",fileRoad);
sprintf(Ext,"%s\\%s",fileRoad,fileExt);
HANDLE hFindFile = FindFirstFile(file,&wfd);
if(!hFindFile) return;
//调用SearchExt搜索符合条件的文件
SearchExt(fileRoad,Ext);
do{
char *fileName = wfd.cFileName;
if(fileName[0] == '.') continue; //跳过当前目录(. or ..)
//如果文件属性为文件夹则递归搜索文件
if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
char dir[MAX_PATH] = "";
sprintf(dir,"%s\\%s",fileRoad,fileName);
SearchFile(dir,fileExt);
}
}while(FindNextFile(hFindFile,&wfd));
}
int main(void)
{
SearchFile("C:\\","*");
printf("\n搜索结束,共找到:%ld 个文件\n",fileNum);
return 0;
}