Q:求一删除目录的算法!
A:为什么不用SHFileOperation函数?
1.BOOL DeleteDir(LPCTSTR lpszDir)
{
SHFILEOPSTRUCT FileOp;
//add begins...
TCHAR buf[_MAX_PATH+2];
memset(buf,0,sizeof(buf));
_tcscpy(buf,lpszDir);
//add ends...
memset(&FileOp,0,sizeof(SHFILEOPSTRUCT));
FileOp.hwnd=m_hWnd;
FileOp.wFunc=FO_DELETE;
FileOp.pFrom=buf; //改一下pFrom指针到buf.
FileOp.pTo=NULL;
FileOp.fFlags=FOF_NOCONFIRMATION¦FOF_SILENT¦FOF_ALLOWUNDO;
FileOp.fAnyOperationsAborted=FALSE;
FileOp.hNameMappings =NULL;
FileOp.lpszProgressTitle =NULL;
int rval=SHFileOperation(&FileOp);
if(rval==0)
{
if(FileOp.fAnyOperationsAborted==TRUE)
{
::AfxMessageBox("删除项目操作被取消!",MB_OK);
return FALSE;
}
else
{
//::AfxMessageBox("删除目录操作成功!",MB_OK);
return TRUE;
}
}
else
{
::AfxMessageBox("删除项目操作失败!",MB_OK¦MB_ICONEXCLAMATION);
return FALSE;
}
}2.BOOL DeleteDirectory(LPCTSTR strDes)
{//删除目标目录下的所有文件
WIN32_FIND_DATA FileData;
HANDLE hSearch;
BOOL bFinished=FALSE;
CString strTemp(strDes); strTemp+=_T("\\*.*");
hSearch=FindFirstFile((LPCTSTR)strTemp,&FileData);
if (hSearch==INVALID_HANDLE_VALUE)
{
bFinished=TRUE; //该目录下没有文件
}
while(!bFinished)
{
strTemp=strDes;
strTemp=strTemp+_T("\\")+FileData.cFileName;
//是目录就进入递归调用
if (FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
{
DeleteDirectory(strTemp);
}
else
{//是文件则删除
DeleteFile(strTemp);
}
if (!FindNextFile(hSearch,&FileData))
{
bFinished=TRUE;
}
}
FindClose(hSearch);
//删除空目录
RemoveDirectory(strDes);
return TRUE;