对比:使用cmd命令删除文件夹下所有文件 / 使用DeleteFile函数

先说结论:使用命令行的rmdir总是可以把文件/文件夹清除,但是MFC自己的 DeleteFile函数有时出现删除失灵的情况(qt的QDir::removeRecursively()也有类似问题)。

1) 使用cmd命令删除文件夹 出处:https://www.cnblogs.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);

 

你可能感兴趣的:(windows,MFC,Visual,C++)