工控编程吧
标题:
上位机MFC删除非空文件夹
[打印本页]
作者:
qq263946146
时间:
2017-7-2 13:24
标题:
上位机MFC删除非空文件夹
(, 下载次数: 4)
上传
点击文件名下载附件
删除一个文件夹可以用函数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("成功");
}
复制代码
(, 下载次数: 0)
上传
点击文件名下载附件
[weixinlianxi]1[/weixinlianxi]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4