赞
踩
先说结论:使用命令行的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 <afx.h>
-
- 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);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。