MFC删除某个文件夹下的所有内容

zhuyf87 2013-05-06 12:01:06
MFC删除某个文件夹下的所有内容,但不删除该文件夹。
我现在用如下函数,递归删除该文件夹及其中的内容,然后调用CreateDirectory重新创建该文件夹。
有什么更好的办法吗?谢谢大家。

void CDirectory::DeleteDirectory(const CString &strPath)
{
CFileFind tempFind;
TCHAR sTempFileFind[MAX_PATH] = { 0 };

wsprintf(sTempFileFind, _T("%s\\*.*"), strPath);
BOOL IsFinded = tempFind.FindFile(sTempFileFind);

while (IsFinded)
{
IsFinded = tempFind.FindNextFile();

if (!tempFind.IsDots())
{
TCHAR sFoundFileName[200] = { 0 };
_tcscpy(sFoundFileName, tempFind.GetFileName().GetBuffer(200));

if (tempFind.IsDirectory())
{
TCHAR sTempDir[200] = { 0 };
wsprintf(sTempDir, _T("%s\\%s"),strPath, sFoundFileName);
DeleteDirectory(sTempDir);
}
else
{
TCHAR sTempFileName[200] = { 0 };
wsprintf(sTempFileName, _T("%s\\%s"), strPath, sFoundFileName);
DeleteFile(sTempFileName);
}
}
}

tempFind.Close();

if(!RemoveDirectory(strPath))
return false;

return true;
}
...全文
1146 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hello_TanGT 2014-08-08
  • 打赏
  • 举报
回复
学习中
青松2 2013-05-06
  • 打赏
  • 举报
回复
貌似没有更好的办法了。静等高手出现
oyljerry 2013-05-06
  • 打赏
  • 举报
回复
SHFILEOPSTRUCT Op; 

ZeroMemory(&Op, sizeof(Op)); //删除文件夹
Op.hwnd = NULL; 
Op.wFunc = FO_DELETE; 
char deletedir [1200];
memset(deletedir,0,1200);
sprintf(deletedir,"c:\\log");
Op.pFrom = deletedir;             // 这里放上文件名即可 
Op.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION; 

SHFileOperation(&Op);
绿苹果果 2013-05-06
  • 打赏
  • 举报
回复
RemoveDirectory(%%1); CreateDirectory(%%1,NULL);
笨笨仔 2013-05-06
  • 打赏
  • 举报
回复
我的文件处理类中的一个处理函数:

// 删除目录中全部文件
BOOL CFileManage::DeleteAll(CString dirName)
{
	CFileFind tempFind;
	CString foundFileName;
	CString tempFileFind=dirName+_T("*.*");
	BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
	while(IsFinded)
	{
		IsFinded=(BOOL)tempFind.FindNextFile();
		if(!tempFind.IsDots())
		{
			foundFileName=tempFind.GetFileName();
			CString tempFileName=dirName+_T("\\")+foundFileName;
			DeleteFile(tempFileName);						// 删除文件
		}
	}
	tempFind.Close();

	return TRUE;
}
wumn29 2013-05-06
  • 打赏
  • 举报
回复
 if(!RemoveDirectory(strPath))
        return false;
把这就话去掉不就行了
liuli7786 2013-05-06
  • 打赏
  • 举报
回复
怎么回事??重发一遍
void  DeleteDirectory(CString  strDir)     
{     
	if(strDir.IsEmpty())     
		return;     

	//   首先删除文件及子文件夹     
	CFileFind   ff;     
	BOOL   bFound  =  ff.FindFile(strDir+L"\\*", 0);     
	while(bFound)     
	{     
		bFound  =  ff.FindNextFile();     
		if(ff.GetFileName()=="."||ff.GetFileName()=="..")     
			continue;     
		//   去掉文件(夹)只读等属性     
		SetFileAttributes(ff.GetFilePath(), FILE_ATTRIBUTE_NORMAL);     
		if(ff.IsDirectory())     
		{     
			//   递归删除子文件夹     
			DeleteDirectory(ff.GetFilePath());     
			RemoveDirectory(ff.GetFilePath());     
		}     
		else     
		{     
			//   删除文件     
			DeleteFile(ff.GetFilePath());     
		}     
	}     
	ff.Close();     

	//   然后删除该文件夹     
	//RemoveDirectory(strDir);     
} 
liuli7786 2013-05-06
  • 打赏
  • 举报
回复
void  DeleteDirectory(CString  strDir)     
{     
	if(strDir.IsEmpty())     
		return;     

	//   首先删除文件及子文件夹     
	CFileFind   ff;     
	BOOL   bFound  =  ff.FindFile(strDir+L"\\*", 0);     
	while(bFound)     
	{     
		bFound  =  ff.FindNextFile();     
		if(ff.GetFileName()=="."||ff.GetFileName()=="..")     
			continue;     
		//   去掉文件(夹)只读等属性     
		SetFileAttributes(ff.GetFilePath(), FILE_ATTRIBUTE_NORMAL);     
		if(ff.IsDirectory())     
		{     
			//   递归删除子文件夹     
			DeleteDirectory(ff.GetFilePath());     
			RemoveDirectory(ff.GetFilePath());     
		}     
		else     
		{     
			//   删除文件     
			DeleteFile(ff.GetFilePath());     
		}     
	}     
	ff.Close();     

	//   然后删除该文件夹     
	//RemoveDirectory(strDir);     
} 

16,549

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧