Microsoft Visual Studio 2015
新建一个基于对话框的应用程序,工程名为DeleteCertainFolderFile
界面设计如下:
双击“>>”按钮添加响应函数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);}
双击“删除文件”按钮添加响应函数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('请选择目录!');}
在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);}
程序运行结果:
注意函数的添加