关于C++(MFC)获取指定文件夹下的所有文件列表

关于C++(MFC)获取指定文件夹下的所有文件列表

// 获取指定文件夹下的所有文件列表
void GetFilePath(CString sPath, CStringList *pstrNameList);

// ------------------------------------------------------------------
// 获取指定文件夹下的所有文件列表
// add by jzh 2009-07-06
// ------------------------------------------------------------------
void CommFunc::GetFilePath(CString sPath, CStringList *psNameList)
{
    CFileFind ff;        //定义一个CfileFind对象
  //BOOL bFlag;
  sPath = sPath + "*.*";
  if (!ff.FindFile(sPath))  //打开以sPath为目标的文件查询,并检查调用是否成功
  {
        return;
  }
  else
  {
    // FindNextFile()的注意漏掉最后一项
    while (ff.FindNextFile()) //查找下个文件
    {
      //if (ff.IsDots())
        //continue;
      if (!ff.IsDots() && ff.IsDirectory())
      {
        CString sTemp;
        int iIndex;
        sTemp = ff.GetFilePath(); //取到目录的全路径
        if (sTemp.Right(1) != "\\")
          sTemp += "\\";
        iIndex = sPath.ReverseFind('\\'); 
        sTemp += sPath.Right(sPath.GetLength() - iIndex - 1); //生成路径  
        GetFilePath(sTemp, psNameList); //递归调用函数
      }
      else if(!ff.IsDots() && !ff.IsDirectory())
      {
        psNameList->AddTail(ff.GetFilePath()); //加入文件列表
        //MessageBox(NULL, ff.GetFilePath(), TEXT("提示"), MB_OK);
      }
    }

    // 当得到最后一个文件时再进行FindNextFile()必然返回0
    // psNameList里面无法获得最后一项文件名
    // 所以再判断一次
    if (!ff.IsDots() && ff.IsDirectory())
    {
      CString sTemp;
      int iIndex;
      sTemp = ff.GetFilePath(); //取到目录的全路径
      if (sTemp.Right(1) != "\\")
        sTemp += "\\";
      iIndex = sPath.ReverseFind('\\'); 
      sTemp += sPath.Right(sPath.GetLength() - iIndex - 1); //生成路径  
      GetFilePath(sTemp, psNameList); //递归调用函数
    }
    else if(!ff.IsDots() && !ff.IsDirectory())
    {
      psNameList->AddTail(ff.GetFilePath()); //加入文件列表
      //MessageBox(NULL, ff.GetFilePath(), TEXT("提示"), MB_OK);
    }
  }
  ff.Close();
}

 

发表回复

您的电子邮箱地址不会被公开。