转自: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
c++删除空文件夹
使用方法: char dir[] = "d://test//"; DeleteEmptyDirectories(dir); ///////////////////////////////////////////////////// void DeleteEmptyDirectories(const char *dir) { WIN32_FIND_DATA finder; HANDLE hFileFind; char search[MAX_PATH]; strcpy(search, dir); strcat(search, "*.*"); hFileFind = FindFirstFile(search, &finder); if (hFileFind != INVALID_HANDLE_VALUE) { do { char path[MAX_PATH]; strcpy(path, dir); strcat(path, finder.cFileName); if ((finder.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && strcmp(finder.cFileName, ".") && strcmp(finder.cFileName, "..")) { char subdir[MAX_PATH]; strcpy(subdir, path); strcat(subdir, "//"); DeleteEmptyDirectories(subdir); // AfxMessageBox(subdir); RemoveDirectory(path); } } while (FindNextFile(hFileFind, &finder) != 0); FindClose(hFileFind); } }另外,用SHFILEOPSTRUCT、SHFileOperation也可以删除文件夹。