一个遍历所有文件夹的例子

只是给出那个最核心的函数,他只是对文件夹感兴趣。

 


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);//进行感染 此函数下面介绍

  }

 }

 

 

posted @ 2010-01-10 21:16  aicro  阅读(250)  评论(0编辑  收藏  举报