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开发的朋友应该可以看得懂的。