当前位置:首页 > 通信资讯 > 正文

使用递归删除非空目录(递归删除目录的命令)

本文实例讲述了C++递归删除一个目录的实现方法。分享给大家供大家参考。具体方法如下:

CFindFile的使用框架如下:

复制代码 代码如下: void Recurse(LPCTSTR pstr)
{
CFileFind finder;

// build a string with wildcards
CString strWildcard(pstr);
strWildcard += _T("\\*.*");

// start working for files
BOOL bWorking = finder.FindFile(strWildcard);

while (bWorking)
{
bWorking = finder.FindNextFile();

// skip . and .. files; otherwise, we'd
// recur infinitely!

if (finder.IsDots())
continue;

// if it's a directory, recursively search it

if (finder.IsDirectory())
{
CString str = finder.GetFilePath();
TRACE(_T("%s\n"), (LPCTSTR)str);
Recurse(str);
}
}

finder.Close();
}

递归删除代码如下:

复制代码 代码如下: //循环删除一个目录
void RecursiveDelete(CString strDir)
{
CFileFind ff;
CString strPath;
strPath = strDir;
if (strPath.Right(1) != '\\')
{
strPath += '\\';
}
strPath += "*.*";

BOOL bWorking = ff.FindFile(strPath);
while (bWorking)
{
bWorking = ff.FindNextFile();

// skip . and .. files; otherwise, we'd
// recur infinitely!
if (ff.IsDots())
continue;

// if it's a directory, recursively search it

if (ff.IsDirectory())
{
//递归目录
CString str = ff.GetFilePath();
TRACE(_T("%s\n"), (LPCTSTR)str);
RecursiveDelete(str);
//删除目录
::SetFileAttributesA(str, FILE_ATTRIBUTE_NORMAL);
::RemoveDirectory(str);
}
else
{
//删除文件
CString str = ff.GetFilePath();
TRACE(_T("%s\n"), (LPCTSTR)str);
::SetFileAttributes(str, FILE_ATTRIBUTE_NORMAL);
::DeleteFile(str);
}
}

ff.Close();

}
int main(int argc, char *argv[])
{
RecursiveDelete("C:\\20_128\\");
return 0;
}

希望本文所述对大家的C++程序设计有所帮助。

如果您对该产品感兴趣,请填写办理(客服微信:xiaoxiongyidong)

为您推荐:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。