方法一:
bool deleteDirectory(const char* pszDir)
{
WIN32_FIND_DATA fd;
char szTempFileFind[MAX_PATH] = { 0 };
bool bIsFinish = false;
ZeroMemory(&fd, sizeof(WIN32_FIND_DATA));
sprintf(szTempFileFind, "%s//*.*", pszDir);
HANDLE hFind = FindFirstFile(szTempFileFind, &fd);
if(hFind == INVALID_HANDLE_VALUE)
return false;
while (!bIsFinish) //删除非空目录下的所有文件以及目录
{
bIsFinish = (FindNextFile(hFind, &fd)) ? false : true;
if ((strcmp(fd.cFileName, ".") != 0) && (strcmp(fd.cFileName, "..") != 0))
{
char szFoundFileName[MAX_PATH] = { 0 };
strcpy(szFoundFileName, fd.cFileName);
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //判断是不是目录
{
char szTempDir[MAX_PATH] = { 0 };
sprintf(szTempDir, "%s//%s", pszDir, szFoundFileName);
deleteDirectory(szTempDir);
}
else
{
char szTempFileName[MAX_PATH] = { 0 };
sprintf(szTempFileName, "%s//%s", pszDir, szFoundFileName);
DeleteFile(szTempFileName);
}
}
}
FindClose(hFind);
if (!RemoveDirectory(pszDir)) //删除已清空了内容的目录
return false;
return true;
}
{
WIN32_FIND_DATA fd;
char szTempFileFind[MAX_PATH] = { 0 };
bool bIsFinish = false;
ZeroMemory(&fd, sizeof(WIN32_FIND_DATA));
sprintf(szTempFileFind, "%s//*.*", pszDir);
HANDLE hFind = FindFirstFile(szTempFileFind, &fd);
if(hFind == INVALID_HANDLE_VALUE)
return false;
while (!bIsFinish) //删除非空目录下的所有文件以及目录
{
bIsFinish = (FindNextFile(hFind, &fd)) ? false : true;
if ((strcmp(fd.cFileName, ".") != 0) && (strcmp(fd.cFileName, "..") != 0))
{
char szFoundFileName[MAX_PATH] = { 0 };
strcpy(szFoundFileName, fd.cFileName);
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //判断是不是目录
{
char szTempDir[MAX_PATH] = { 0 };
sprintf(szTempDir, "%s//%s", pszDir, szFoundFileName);
deleteDirectory(szTempDir);
}
else
{
char szTempFileName[MAX_PATH] = { 0 };
sprintf(szTempFileName, "%s//%s", pszDir, szFoundFileName);
DeleteFile(szTempFileName);
}
}
}
FindClose(hFind);
if (!RemoveDirectory(pszDir)) //删除已清空了内容的目录
return false;
return true;
}
方法二 :这个方法在某些平台上可能无法运行。
SHFILEOPSTRUCT FileOp;
memset(&FileOp, 0, sizeof(FileOp));
memset(&FileOp, 0, sizeof(FileOp));
FileOp.hwnd=NULL;
FileOp.wFunc=FO_DELETE; //删除
FileOp.pFrom=dirpath.c_str(); // 非空目录的路径
FileOp.pTo=NULL;
FileOp.fFlags=FOF_SIMPLEPROGRESS | FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
FileOp.wFunc=FO_DELETE; //删除
FileOp.pFrom=dirpath.c_str(); // 非空目录的路径
FileOp.pTo=NULL;
FileOp.fFlags=FOF_SIMPLEPROGRESS | FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
if((::SHFileOperation(&FileOp))!=0)
{
MessageBox("删除卷组目录失败");
op.Close();
return;
}
{
MessageBox("删除卷组目录失败");
op.Close();
return;
}