MFC应用实例:[60]删除指定类型的文件
1、新建一个基于对话框的应用程序,工程名为DeleteCertainFolderFile
![MFC应用实例:[60]删除指定类型的文件](https://exp-picture.cdn.bcebos.com/30601b6104a355e92ce31564d22ae3efe17868e1.jpg)
2、界面设计如下:
![MFC应用实例:[60]删除指定类型的文件](https://exp-picture.cdn.bcebos.com/586bfdefe07814316afbcfdfdc6699cf035362e1.jpg)
3、双击“>>”按钮添加响应函数OnFolder(),在响应函数OnFolder()中添加一下代码:
void CDeleteCertainFolderFileDlg::OnFolder()
{
//定义指向IMalloc的指针
LPMALLOC pMalloc;
if (::SHGetMalloc(&pMalloc) != NOERROR)
return; // failed to get allocator
char szDisplayName[_MAX_PATH];
char szBuffer[_MAX_PATH];
BROWSEINFO browseInfo; //构造对话框结构
browseInfo.hwndOwner = this->m_hWnd;
browseInfo.pidlRoot = NULL; //设置根目录为桌面
browseInfo.pszDisplayName = szDisplayName;
browseInfo.lpszTitle = "选择删除文件的目录"; //对话框标题
browseInfo.ulFlags = BIF_RETURNFSANCESTORS|BIF_RETURNONLYFSDIRS;
browseInfo.lpfn = NULL; //未用
browseInfo.lParam = 0; //未用
LPITEMIDLIST lpItemIDList;
if ((lpItemIDList = ::SHBrowseForFolder(&browseInfo))!= NULL)
{
//得到目录的路径
if (::SHGetPathFromIDList(lpItemIDList, szBuffer))
{
if (szBuffer[0] == '\0')
{
return ;
}
m_strFolder = szBuffer;
UpdateData(false);
}
else
{
AfxMessageBox("不能得到所选的文件夹!",MB_ICONSTOP|MB_OK);
return;
}
pMalloc->Free(lpItemIDList);
pMalloc->Release();
}
DisplayFileList(m_strFolder);
}
![MFC应用实例:[60]删除指定类型的文件](https://exp-picture.cdn.bcebos.com/988e1c532f6323855c7b1f22cce833e038725de1.jpg)
4、双击“删除文件”按钮添加响应函数OnDelete(),在响应函数OnDelete()中添加一下代码:
void CDeleteCertainFolderFileDlg::OnDelete()
{
UpdateData(true);
CString m_extern;
switch (m_radio) //获取要删除文件类型的后缀名
{
case 0:
GetDlgItem(IDC_RADIO1)->GetWindowText(m_extern);
break;
case 1:
GetDlgItem(IDC_RADIO2)->GetWindowText(m_extern);
break;
case 2:
GetDlgItem(IDC_RADIO3)->GetWindowText(m_extern);
break;
case 3:
GetDlgItem(IDC_RADIO4)->GetWindowText(m_extern);
break;
case 4:
GetDlgItem(IDC_RADIO5)->GetWindowText(m_extern);
break;
}
if(m_strFolder!="" && m_extern!="")//当前目录和文件类型不为空
{
CString str,strdel;
//构造类似"C:\\My Documents\\*.txt"的类型
char string[60];
strcpy( string, m_strFolder);
strcat( string, "\\*" );
strcat( string, m_extern );
CFileFind filefind;
if(filefind.FindFile(string,0)!=0)//遍历搜索文件
{
while(filefind.FindNextFile()!=0)
{
strdel=filefind.GetFilePath();//获取文件名
CFile::Remove(strdel);//删除文件
}
strdel=filefind.GetFilePath();
CFile::Remove(strdel);
AfxMessageBox("文件删除完成!");
DisplayFileList(m_strFolder);//更新显示列表框
}
else
{
AfxMessageBox("当前目录下,没有这种类型的文件!");
}
}
else
AfxMessageBox("请选择目录!");
}
![MFC应用实例:[60]删除指定类型的文件](https://exp-picture.cdn.bcebos.com/38332303bbea3e86f4059cf05cd4483105eb55e1.jpg)
5、在CDeleteCertainFolderFileDlg类中添加DisplayFileList(),OnChangeEdit1()这两个函数,代码如下:
void CDeleteCertainFolderFileDlg::DisplayFileList(CString strdir)
{
TCHAR szPath [MAX_PATH];
strcpy(szPath,strdir);
//DlgDirList函数用于向ListBox中加入某路径下的文件
int nReslt = DlgDirList(
szPath,//目录
IDC_LIST1,//ListBox的资源ID
0,//当前选择的驱动器和路径的静态控件ID,如果不用显示这些驱动器和路径,置为0
DDL_READWRITE|DDL_READONLY|DDL_HIDDEN|DDL_SYSTEM|DDL_ARCHIVE);
}
void CDeleteCertainFolderFileDlg::OnChangeEdit1()
{
// TODO: Add your control notification handler code here
UpdateData(true);
DisplayFileList(m_strFolder);
}
![MFC应用实例:[60]删除指定类型的文件](https://exp-picture.cdn.bcebos.com/05aae8a75f0f822bb8a3e181c018512c8df14de1.jpg)
6、程序运行结果:
![MFC应用实例:[60]删除指定类型的文件](https://exp-picture.cdn.bcebos.com/506d92f1d8a726339bc93050c02c56ee7a7f44e1.jpg)