windows api中没有提供现成的多层创建目录、删除目录。这里修改了部分代码实现递归创建目录、删除目录。
//删除目录
BOOL DeleteDirectory(char* sDirName)
{
CFileFind tempFind;
char sTempFileFind[200] ;
sprintf(sTempFileFind,"%s//*.*",sDirName);
BOOL IsFinded = tempFind.FindFile(sTempFileFind);
while (IsFinded)
{
IsFinded = tempFind.FindNextFile();
if (!tempFind.IsDots())
{
char sFoundFileName[200];
strcpy(sFoundFileName,tempFind.GetFileName().GetBuffer(200));
if (tempFind.IsDirectory())
{
char sTempDir[200];
sprintf(sTempDir,"%s//%s",sDirName,sFoundFileName);
DeleteDirectory(sTempDir);
}
else
{
char sTempFileName[200];
sprintf(sTempFileName,"%s//%s",sDirName,sFoundFileName);
DeleteFile(sTempFileName);
}
}
}
tempFind.Close();
if(!RemoveDirectory(sDirName))
{
return FALSE;
}
return TRUE;
}
// 判断目录是否存在
BOOL FolderExists(CString s)
{
DWORD attr;
attr = GetFileAttributes(s);
return (attr != (DWORD)(-1) ) &&
( attr & FILE_ATTRIBUTE_DIRECTORY);
}
// 创建目录
BOOL CreateDir(CString P)
{
int len=P.GetLength();
if ( len <2 ) return false;
if('//'==P[len-1])
{
P=P.Left(len-1);
len=P.GetLength();
}
if ( len <=0 ) return false;
if (len <=3)
{
if (FolderExists(P))return true;
else return false;
}
if (FolderExists(P))return true;
CString Parent;
Parent=P.Left(P.ReverseFind('//') );
if(Parent.GetLength()<=0)return false;
BOOL Ret=CreateDir(Parent);
if(Ret)
{
SECURITY_ATTRIBUTES sa;
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor=NULL;
sa.bInheritHandle=0;
Ret=(CreateDirectory(P,&sa)==TRUE);
return Ret;
}
else
return FALSE;
}