Код:
void FindDir(char *path,char *mask, char file[])
{
WIN32_FIND_DATA wfd;
HANDLE hfound;
char newpath[MAX_PATH];
char fpath[MAX_PATH];
char pathifile[MAX_PATH]; //полный путь до файла
char delpath[MAX_PATH];
strcpy(fpath,path);
strcat(fpath,"\\");
strcpy(delpath,fpath);
strcat(fpath,mask);
if((hfound=FindFirstFile(fpath,&wfd))!=INVALID_HANDLE_VALUE)
{
if(!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))
{
//нашли первый файл в папке path
//
printf("Error: %d\n", GetLastError());
}
while(FindNextFile(hfound,&wfd))
{
if(!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))
{
// файл в папке path
// delpath - папка, с которой начинается реккурсия
// wfd.cFileName - имя найденного файла
// копируем строку delpath в pathifile
strcpy(pathifile, delpath);
// прибавляем к строке pathifile значение
// переменной wfd.cFileName - имя файла
strcat(pathifile, wfd.cFileName);
if (strstr(pathifile, file) != NULL)
{
// send(sd, pathifile, strlen(pathifile), 0);
strcat(tmp, pathifile);
strcat(tmp, "\n");
}
// делаем что-либо с найденным файлом
}
}
}
FindClose(hfound);
//поиск файлов закончили, теперь ищем подпапки
strcpy(fpath,path);
strcat(fpath,"\\*.*");
if((hfound=FindFirstFile(fpath,&wfd))!=INVALID_HANDLE_VALUE)
{
if((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))
{
strcpy(newpath,path);
strcat(newpath,"\\");
strcat(newpath,wfd.cFileName);
FindDir(newpath,mask, file, sd); //Рекурсивный вызов
}
while(FindNextFile(hfound,&wfd))
{
if((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(wfd.cFileName,"..")&&strcmp(wfd.cFileName,"."))
{
strcpy(newpath,path);
strcat(newpath,"\\");
strcat(newpath,wfd.cFileName);
FindDir(newpath,mask, file, sd); //Рекурсивный вызов
}
}
}
}