文件遍历

本文探讨了在C++环境下使用CFileFind类遍历文件夹寻找MP3文件时遇到的问题。具体分析了cff.IsDots()返回1的原因,并提供了递归搜索文件夹的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

void CMainFrame::BrowseDir(CString &strDir)
{
 //定义查找文件对象
 CFileFind cff;
 CString szDir = strDir;
 //当前文件
 CString str; 
 //当为根目录时,最右侧为'\'
 if(szDir.Right(1) != "\\")
  szDir += "\\";
 //所有文件
 szDir += _T("*.*");
 BOOL bResult = cff.FindFile(szDir);
 while(bResult)
 {
  bResult = cff.FindNextFile();
  if(cff.IsDirectory() && !cff.IsDots())
  {
   //如果是一个子目录,用递归继续往深一层找
   m_strPath=cff.GetFilePath();
   BrowseDir(m_strPath);

  }
  else if(!cff.IsDirectory() && !cff.IsDots())
  {
   //打开当前访问的文件获取文件大小等信息
   str.Format(L"%s",cff.GetFilePath());
   m_strFN.Format(L"%s",cff.GetFileName());
   if(str.Right(3)=="mp3"||str.Right(3)=="mP3"||
    str.Right(3)=="Mp3"||str.Right(3)=="MP3")
   {
    HANDLE hFile=::CreateFile(str,GENERIC_READ,FILE_SHARE_READ,NULL,
     OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    DWORD fileSize=::GetFileSize(hFile,NULL);
    ReagTag(hFile,fileSize,m_tagID1,0);
    //添加数据库中
    CSongRecordset songDb;
    AddToDb(songDb,m_tagID1);
   }
  }
  //置空
  str="";
 }
 cff.Close();//关闭
}

我封装了一个函数用来收集文件夹下的MP3,当调试时,strDir为"E:\新建文件夹 (3)"时,为什么cff.IsDots()会为1,按道理应该为0啊.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值