转自:http://blog.csdn.net/sshhbb/archive/2010/12/07/6061029.aspx
c++语言本身是不能删除文件或文件夹的,他们是windows操作系统里的东西,所以得借助其api函数。
其一:使用shell 接口:
void FileDelete(CString directory) { SHFILEOPSTRUCT shFileOp; char strCurrentPath[MAX_PATH]; memset(&shFileOp,0,sizeof(shFileOp)); GetCurrentDirectory(MAX_PATH,strCurrentPath); strcat_s(strCurrentPath,sizeof(strCurrentPath),directory); strCurrentPath[strlen(strCurrentPath)+1] = 0; shFileOp.wFunc = FO_DELETE; shFileOp.pFrom = strCurrentPath; shFileOp.pTo = NULL; shFileOp.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;
SHFileOperation(&shFileOp); }
使用该函数你得 #include<Shlwapi.h> #pragma comment(lib,"Shlwapi.lib") 使用他可以将directory和其下的所有文件静默删除,听说在删除共享文件夹的时候会出错或提示,没试过。不过我使用system()做删除的时候共享文件夹下的删除是会出错的。
其二: 使用MFC的CFileFind递归遍历文件并删除文件和文件夹
bool DeleteDirectory(char* strDirName) { CFileFind tempFind; char strTempFileFind[MAX_PATH];
sprintf(strTempFileFind,"%s//*.*", strDirName);
BOOL IsFinded = tempFind.FindFile(strTempFileFind);
while (IsFinded) { IsFinded = tempFind.FindNextFile();
if (!tempFind.IsDots()) { char strFoundFileName[MAX_PATH];
strcpy(strFoundFileName, tempFind.GetFileName().GetBuffer(MAX_PATH));
if (tempFind.IsDirectory()) { char strTempDir[MAX_PATH];
sprintf(strTempDir,"%s//%s", strDirName, strFoundFileName);
DeleteDirectory(strTempDir); } else { char strTempFileName[MAX_PATH];
sprintf(strTempFileName,"%s//%s", strDirName, strFoundFileName);
DeleteFile(sTempFileName); } } }
tempFind.Close();
if(!RemoveDirectory(strDirName)) { return FALSE; }
return TRUE; }
//
转自:http://zhidao.baidu.com/question/188089955.html
#include <stdlib.h> #include <stdio.h> #include <string.h> void main() { char str[120] ="RMDIR /S "; //加上 /Q 删除时不要求确认 char str2[100]; //文件夹的绝对路径 printf("输入的文件夹位置为:/n"); scanf("%s",str2); strcat(str,str2); system(str); system("pause"); }
方便的办法,你可以使用dos命令,在C++里可以用system调用 比如system("RMDIR aaa"); 就是删掉aaa这个目录 dos命令可以在cmd里打help回车查看http://topic.csdn.net/u/20090126/23/950e840e-8ba9-4be7-94ba-2e48e7cdf862.htmlBOOL DeleteDir(char * path) { WIN32_FIND_DATA finddata; HANDLE hfind; char * pdir; pdir=new char[strlen(path)+5]; strcpy(pdir,path); if(path[strlen(path)-1]!='//') strcat(pdir,"//*.*"); else strcat(pdir,"*.*"); hfind=FindFirstFile(pdir,&finddata); if(hfind==INVALID_HANDLE_VALUE) return FALSE; delete []pdir; do { pdir=new char[strlen(path)+strlen(finddata.cFileName)+2]; sprintf(pdir,"%s//%s",path,finddata.cFileName); if(strcmp(finddata.cFileName,".")==0 ||strcmp(finddata.cFileName,"..")==0) { RemoveDirectory(pdir); continue; } if((finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)==0) DeleteFile(pdir); else DeleteDir(pdir); delete []pdir; }while(FindNextFile(hfind,&finddata)); if(RemoveDirectory(path)) return TRUE; else return FALSE; } //
转自:http://zhidao.baidu.com/question/96292128.html
