VC实现批量删除指定文件的方法
本文所述实例主要实现了删除某个盘符下指定位置的文件,可以是TXT、doc、jpeg等格式,只要选定格式后,再定义好盘符,即可一键删除所有指定类型的文件。再次提示删除前请确认,且删除后不可恢复。
以下是最主要的核心代码,其它代码读者可以自己添加。
SHFILEINFOshInfo; memset(&shInfo,0,sizeof(SHFILEINFO)); HIMAGELISThImage=(HIMAGELIST)SHGetFileInfo("C:\\",0,&shInfo,sizeof(SHFILEINFO), SHGFI_SYSICONINDEX|SHGFI_SMALLICON); m_ImageList.Attach(hImage); m_ComboEx.SetImageList(&m_ImageList); m_ComboEx.ResetContent(); charpchDrives[128]={0}; char*pchDrive; GetLogicalDriveStrings(sizeof(pchDrives),pchDrives);//列举盘符 pchDrive=pchDrives; intnItem=0; while(*pchDrive) { COMBOBOXEXITEMcbi; CStringcsText; cbi.mask=CBEIF_IMAGE|CBEIF_INDENT|CBEIF_OVERLAY| CBEIF_SELECTEDIMAGE|CBEIF_TEXT; SHFILEINFOshInfo;//定义文件信息 intnIcon; SHGetFileInfo(pchDrive,0,&shInfo,sizeof(shInfo), SHGFI_ICON|SHGFI_SMALLICON);//获取系统文件图标 nIcon=shInfo.iIcon; //设置COMBOBOXEXITEM结构 cbi.iItem=nItem; cbi.pszText=pchDrive; cbi.cchTextMax=strlen(pchDrive); cbi.iImage=nIcon; cbi.iSelectedImage=nIcon; cbi.iOverlay=0; cbi.iIndent=(0&0x03); m_ComboEx.InsertItem(&cbi);//插入数据 nItem++; pchDrive+=strlen(pchDrive)+1; } returnTRUE;//returnTRUEunlessyousetthefocustoacontrol } voidCDeleteDlg::OnSysCommand(UINTnID,LPARAMlParam) { if((nID&0xFFF0)==IDM_ABOUTBOX) { CAboutDlgdlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID,lParam); } } voidCDeleteDlg::OnPaint() { if(IsIconic()) { CPaintDCdc(this);//devicecontextforpainting SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0); //Centericoninclientrectangle intcxIcon=GetSystemMetrics(SM_CXICON); intcyIcon=GetSystemMetrics(SM_CYICON); CRectrect; GetClientRect(&rect); intx=(rect.Width()-cxIcon+1)/2; inty=(rect.Height()-cyIcon+1)/2; //Drawtheicon dc.DrawIcon(x,y,m_hIcon); } else { CDialog::OnPaint(); } } HCURSORCDeleteDlg::OnQueryDragIcon() { return(HCURSOR)m_hIcon; } voidCDeleteDlg::DelFile(CStringpath,CStringname) { CStringstrtemp; if(path.Right(1)!="\\")//判断路径是否以\结尾 strtemp.Format("%s\\*.*",path);//设置通配符 else strtemp.Format("%s*.*",path);//设置通配符 CFileFindfindfile; BOOLbfind=findfile.FindFile(strtemp);//查找文件 while(bfind)//循环查找 { bfind=findfile.FindNextFile();//查找下一个文件 if(!findfile.IsDots()&&!findfile.IsDirectory()) { CStringstr=findfile.GetFileName(); intindex=str.ReverseFind('.'); if(str.Right(str.GetLength()-index)==name) { DeleteFile(findfile.GetFilePath()); } } elseif(findfile.IsDots()) { continue; } elseif(findfile.IsDirectory())//如果是目录 { DelFile(findfile.GetFilePath(),name);//递归查找 } } } voidCDeleteDlg::OnButdelete() { //TODO:Addyourcontrolnotificationhandlercodehere CStringpath,name; m_ComboEx.GetWindowText(path); m_ExName.GetWindowText(name);//获得文件扩展名 DelFile(path,name); MessageBox("已删除指定类型文件!"); }
这里省去了窗体部分的代码,进行过VC开发的朋友应该可以看得懂的。