VC遍历文件夹,删除文件夹

      以前也有用到过遍历文件夹的代码,一开始都不会用,只好在网上摘抄别人的。

      但是现在随着自己对VC的逐渐熟悉,感觉很多代码慢慢的开始熟悉了。

 

      之所以要写这段代码是因为自己平时写的小程序越来越多,每个project下的debug文件夹占的空间太大,

     但其实这个目录由没必要存在,所以我就想写个自动删除每个project下的debug文件夹的小程序。

     程序貌似复杂了点。。。。

 

    代码如下:
void CDeletefileDlg::OnBtnok()   //单一文件选择框
{
 // TODO: Add your control notification handler code here
 CFileDialog file(true);
 CString str;
 if (IDOK==file.DoModal())
 {
 // str=file.GetFileName();
  str=file.GetPathName();
 }
    SetDlgItemText(IDC_FILENAME,str);
}

void CDeletefileDlg::OnBtndelete()   //删除单一文件
{
 // TODO: Add your control notification handler code here
 CString cstr;
 GetDlgItemText(IDC_FILENAME,cstr);          
 CFile::Remove(cstr);
 SetDlgItemText(IDC_FILENAME,"");
 MessageBox(cstr+"已删除成功!");
}


void CDeletefileDlg::OnBtndirtest()     //文件夹选择框
{
 // TODO: Add your control notification handler code here
 BROWSEINFO bi;                                      //定义文件浏览对象
 char buffer[MAX_PATH];                              //定义字符缓冲区
 ZeroMemory(buffer,MAX_PATH);                        //初始化字符缓冲区

 bi.hwndOwner=GetSafeHwnd();
    bi.pidlRoot=NULL;
 bi.pszDisplayName=buffer;
 bi.lpszTitle="请选择一个文件夹";     //设置浏览框标题
 bi.ulFlags=BIF_EDITBOX;
 bi.lpfn=NULL;
 bi.lParam=0;
 bi.iImage=0;
 LPITEMIDLIST pList=NULL;
 if ( (pList=SHBrowseForFolder(&bi)) != NULL )  //弹出浏览框对话框
 {
  char path[MAX_PATH];
  ZeroMemory(path,MAX_PATH);
  SHGetPathFromIDList(pList,path);    //获取用户目录
  GetDlgItem(IDC_DIR)->SetWindowText(path);
 }
 
}

void CDeletefileDlg::OnBtndel()  //目录删除函数
{
 // TODO: Add your control notification handler code here
 GetDlgItemText(IDC_DIR,filestr);
 delDirFile(filestr);               //删除目录下的所有文件
 SetDlgItemText(IDC_DIR,"");
 RemoveDirectory(filestr);              //删除空目录
 MessageBox(filestr+"目录已经完全删除!");
 
}

void CDeletefileDlg::delDirFile(CString spath) //删除目录下的所有文件函数
{
 CFileFind find;
 BOOL bworking=find.FindFile(spath+"\\*.*");
 
 while (bworking)
 {
  bworking=find.FindNextFile();
  CString filename=find.GetFileName();

  if (find.MatchesMask(FILE_ATTRIBUTE_DIRECTORY))
  {
   if ( (filename!=".") && (filename != "..")  )  //滤过 . 和 .. 文件夹
   {
    delDirFile(spath+"\\"+filename);
   }
  }
  else
  {  
   CFile::Remove(spath+"\\"+filename);  //如果不是文件夹 直接删除
  }
  RemoveDirectory(spath+"\\"+filename);   //
 }

}

void CDeletefileDlg::finddir(CString findpath)  //查找根目录下的所有子文件
{
 CString deldir;
 GetDlgItemText(IDC_DELDIRNAME,deldir);
 CFileFind find;
 CString filename,tempstr,filepath;
 BOOL bworking=find.FindFile(findpath+"\\*.*");

 while(bworking)
 {
  bworking=find.FindNextFile();
  filepath=find.GetFilePath();
  filename=find.GetFileName();

  tempstr=filename.Right(5);
  if ((deldir==tempstr) && find.MatchesMask(FILE_ATTRIBUTE_DIRECTORY))
  {
   delDirFile(filepath);
   RemoveDirectory(filepath);
  }
  else if( (filename!=".") && (filename != "..") && find.MatchesMask(FILE_ATTRIBUTE_DIRECTORY) )  //这里的递归有问题
  {
   finddir(findpath+"\\"+filename);
  }
 }
 find.Close();

}

void CDeletefileDlg::OnDeldebug()  //删除特定的文件夹函数
{
 // TODO: Add your control notification handler code here
 CString path;
 GetDlgItemText(IDC_DIR,path);
 CString childpath;
    GetDlgItemText(IDC_DELDIRNAME,childpath);
 finddir(path);
 SetDlgItemText(IDC_DIR,"");
    SetDlgItemText(IDC_DELDIRNAME,"");

 MessageBox(path+"下的所有"+childpath+"已经全部删除!");
}

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值