上位机MFC删除非空文件夹
删除一个文件夹可以用函数RemoveDirectory;
但文件夹不为空时,函数就会失败,
所以最直接的方法就是递归调用此函数删除文件夹内所有文件夹,
及调用函数DeleteFile删除全部文件
当前例程实现了这功能,效果如图;
点击<>选择要删除的文件夹>程序弹出文件夹选择对话框,确认后显示选择要删除的文件夹名称;
点击<执行删除>删除事先选择的文件夹;
实现过程:
先创建对话框工程,如界面添加控件,关联按钮1点击函数,实现文件夹选择功能
- #define BIF_NEWDIALOGSTYLE 0x00000040
- void CGkbc8Dlg::OnButton1()
- {
- BROWSEINFO sInfo;
- ::ZeroMemory(&sInfo, sizeof(BROWSEINFO));
- sInfo.pidlRoot = 0;
- sInfo.lpszTitle = _T("请选择一个文件夹:");
- sInfo.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE | BIF_EDITBOX;
- sInfo.lpfn = NULL;
- LPITEMIDLIST lpidlBrowse = ::SHBrowseForFolder(&sInfo); // 显示文件夹选择对话框
- if (lpidlBrowse != NULL)
- {
- TCHAR cFolderPath[MAX_PATH] = {0};
- if (::SHGetPathFromIDList(lpidlBrowse,cFolderPath)) // 取得文件夹名
- SetDlgItemText(IDC_EDIT1,cFolderPath);
- }
- if(lpidlBrowse != NULL)
- ::CoTaskMemFree(lpidlBrowse);
- }
复制代码 2.添加递归删除文件与文件夹函数,再关联删除按钮的点击函数
- BOOL RecursiveDelete(CString szPath)
- {
- BOOL bResult = true;
- CFileFind ff;
- CString path = szPath;
-
- if(path.Right(1) != "\")
- path += "\";
- path += "*.*";
- BOOL res = ff.FindFile(path);
- while(res)
- {
- res = ff.FindNextFile();
- if (!ff.IsDots() && !ff.IsDirectory())//是文件时直接删除
- DeleteFile(ff.GetFilePath());
- else if (ff.IsDots())
- continue;
- else if (ff.IsDirectory())
- {
- path = ff.GetFilePath();
- RecursiveDelete(path);//是目录时继续递归,删除该目录下的文件
- bResult = RemoveDirectory(path);//目录为空后删除目录
- }
- }
- bResult = RemoveDirectory(szPath);//最终删除该目录
- return bResult;
- }
- void CGkbc8Dlg::OnButton2()
- {
- CString sText;
- GetDlgItemText(IDC_EDIT1,sText);
- if(sText.IsEmpty())
- return;
- if(!RecursiveDelete(sText))
- MessageBox("删除失败");
- else MessageBox("成功");
- }
复制代码
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|