先说结论:使用命令行的rmdir总是可以把文件/文件夹清除,但是MFC自己的 DeleteFile函数有时出现删除失灵的情况(qt的QDir::removeRecursively()也有类似问题)。
1) 使用cmd命令删除文件夹 出处:https://www..com/jiangyi666/p/6638815.html
rmdir 删除整个目录
好比说我要删除 222 这个目录下的所有目录和档案,这语法就是:
rmdir /s/q 222
其中:
/s 是代表删除所有子目录跟其中的档案。
/q 是不要它在删除档案或目录时,不再问我 Yes or No 的动作。
要删除的目录前也可以指定路径,如:
rmdir /s/q d:\123\abc
这意思是告诉计算机,把磁盘驱动器 D 的123资料夹里面的abc资料夹中的所有东西全部删除,同时也不要再问我是否要删除。
2)利用CFileFind结合DeleteFile删除文件夹示例。
#include
void vRemoveDirRecursively(CString dir)
{
CFileFind finder;
CString path;
path.Format("%s\\*.*", dir);
bool bExist = finder.FindFile(path);
while(bExist)
{
bExist = finder.FindNextFile();
CString cstrDir = finder.GetFilePath();//
if(!finder.IsDots())
{
if(finder.IsDirectory())
{
vRemoveDirRecursively(cstrDir);
RemoveDirectory(cstrDir);
}
else
{
DeleteFile(cstrDir);
}
}
}
DeleteFile(dir);
}
int main(void)
{
//vRemoveDirRecursively(_T("C:\\code\\vc\\1\\ipch"));
system("rmdir /s/q C:\\code\\vc\\1\\ipch");
return 0;
}
实测发现,vRemoveDirRecursively()不能总是删除文件夹,但是rmdir绝对可靠。
调用system会造成控制台一闪而过的现象,可以用以下语句取代 system:
WinExec("Cmd.exe /C rmdir /s/q C:\\code\\vc\\1\\ipch", SW_HIDE);