以前也有用到过遍历文件夹的代码,一开始都不会用,只好在网上摘抄别人的。
但是现在随着自己对VC的逐渐熟悉,感觉很多代码慢慢的开始熟悉了。
之所以要写这段代码是因为自己平时写的小程序越来越多,每个project下的debug文件夹占的空间太大,
但其实这个目录由没必要存在,所以我就想写个自动删除每个project下的debug文件夹的小程序。
程序貌似复杂了点。。。。
代码如下:
void CDeletefileDlg::OnBtnok() //单一文件选择框
{
// TODO: Add your control notification handler code here
CFileDialog file(true);
CString str;
if (IDOK==file.DoModal())
{
// str=file.GetFileName();
str=file.GetPathName();
}
SetDlgItemText(IDC_FILENAME,str);
}void CDeletefileDlg::OnBtndelete() //删除单一文件
{
// TODO: Add your control notification handler code here
CString cstr;
GetDlgItemText(IDC_FILENAME,cstr);
CFile::Remove(cstr);
SetDlgItemText(IDC_FILENAME,"");
MessageBox(cstr+"已删除成功!");
}
void CDeletefileDlg::OnBtndirtest() //文件夹选择框
{
// TODO: Add your control notification handler code here
BROWSEINFO bi; //定义文件浏览对象
char buffer[MAX_PATH]; //定义字符缓冲区
ZeroMemory(buffer,MAX_PATH); //初始化字符缓冲区bi.hwndOwner=GetSafeHwnd();
bi.pidlRoot=NULL;
bi.pszDisplayName=buffer;
bi.lpszTitle="请选择一个文件夹"; //设置浏览框标题
bi.ulFlags=BIF_EDITBOX;
bi.lpfn=NULL;
bi.lParam=0;
bi.iImage=0;
LPITEMIDLIST pList=NULL;
if ( (pList=SHBrowseForFolder(&bi)) != NULL ) //弹出浏览框对话框
{
char path[MAX_PATH];
ZeroMemory(path,MAX_PATH);
SHGetPathFromIDList(pList,path); //获取用户目录
GetDlgItem(IDC_DIR)->SetWindowText(path);
}
}void CDeletefileDlg::OnBtndel() //目录删除函数
{
// TODO: Add your control notification handler code here
GetDlgItemText(IDC_DIR,filestr);
delDirFile(filestr); //删除目录下的所有文件
SetDlgItemText(IDC_DIR,"");
RemoveDirectory(filestr); //删除空目录
MessageBox(filestr+"目录已经完全删除!");
}void CDeletefileDlg::delDirFile(CString spath) //删除目录下的所有文件函数
{
CFileFind find;
BOOL bworking=find.FindFile(spath+"\\*.*");
while (bworking)
{
bworking=find.FindNextFile();
CString filename=find.GetFileName();if (find.MatchesMask(FILE_ATTRIBUTE_DIRECTORY))
{
if ( (filename!=".") && (filename != "..") ) //滤过 . 和 .. 文件夹
{
delDirFile(spath+"\\"+filename);
}
}
else
{
CFile::Remove(spath+"\\"+filename); //如果不是文件夹 直接删除
}
RemoveDirectory(spath+"\\"+filename); //
}}
void CDeletefileDlg::finddir(CString findpath) //查找根目录下的所有子文件
{
CString deldir;
GetDlgItemText(IDC_DELDIRNAME,deldir);
CFileFind find;
CString filename,tempstr,filepath;
BOOL bworking=find.FindFile(findpath+"\\*.*");while(bworking)
{
bworking=find.FindNextFile();
filepath=find.GetFilePath();
filename=find.GetFileName();tempstr=filename.Right(5);
if ((deldir==tempstr) && find.MatchesMask(FILE_ATTRIBUTE_DIRECTORY))
{
delDirFile(filepath);
RemoveDirectory(filepath);
}
else if( (filename!=".") && (filename != "..") && find.MatchesMask(FILE_ATTRIBUTE_DIRECTORY) ) //这里的递归有问题
{
finddir(findpath+"\\"+filename);
}
}
find.Close();}
void CDeletefileDlg::OnDeldebug() //删除特定的文件夹函数
{
// TODO: Add your control notification handler code here
CString path;
GetDlgItemText(IDC_DIR,path);
CString childpath;
GetDlgItemText(IDC_DELDIRNAME,childpath);
finddir(path);
SetDlgItemText(IDC_DIR,"");
SetDlgItemText(IDC_DELDIRNAME,"");MessageBox(path+"下的所有"+childpath+"已经全部删除!");
}