只是给出那个最核心的函数,他只是对文件夹感兴趣。
bool EnumDirectory(TCHAR *dirpath)
{
WIN32_FIND_DATA fd;
TCHAR szTempFileFind[MAX_PATH] = { 0 };
bool bIsFinish = false;
ZeroMemory(&fd, sizeof(WIN32_FIND_DATA));
wsprintf(szTempFileFind, L"%s\\*.*", dirpath);
HANDLE hFind = FindFirstFile(szTempFileFind, &fd);
if (hFind == INVALID_HANDLE_VALUE)
{
return false;
}
while (!bIsFinish)
{
if ((StrCmp(fd.cFileName, L".") != 0) && (StrCmp(fd.cFileName, L"..") != 0))
{ //过滤掉代表本级和上级的文件夹
TCHAR szFoundFileName[MAX_PATH] = { 0 };
StrCpy(szFoundFileName, fd.cFileName);
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{ //只对文件夹感兴趣
// do what you want;
EnumDirectory(szTempDir);//递归调用
}
}
bIsFinish = (FindNextFile(hFind, &fd)) ? false : true;
}
FindClose(hFind);
return 0;
}
一般的用法如下,
for(i='A';i<='Z';i++)
{
WCHAR x[20]={i,':'};
UINT Type=GetDriveType(x); //对磁盘分区进行逐个类型匹配
if(Type == DRIVE_NO_ROOT_DIR)
MessageBox(NULL,TEXT("DRIVE_NO_ROOT_DIR"),TEXT(""),MB_OK);
if(Type==DRIVE_FIXED||Type==DRIVE_REMOVABLE)//取硬盘和移动磁盘
{
EnumDirectory(x);//进行感染 此函数下面介绍
}
}