MFC应用实例:[60]删除指定类型的文件
1、新建一个基于对话框的应用程序,工程名为DeleteCertainFolderFile
2、界面设计如下:
3、双击“>>”按钮添加响应函数OnFolder(),在响应函数OnFolder(拘七呷憎)中添加一下代码:void CDeleteCertainFolderFileDlg::On僻棍募暖Folder(){ //定义指向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);}
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("请选择目录!");}
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);}
6、程序运行结果: