递归创建目录、删除目录
递归创建目录、删除目录windows api中没有提供现成的多层创建目录、删除目录。这里修改了部分代码实现递归创建目录、删除目录。
//删除目录
BOOL DeleteDirectory(char* sDirName) {CFileFind tempFind;char sTempFileFind ;sprintf(sTempFileFind,"%s//*.*",sDirName);BOOL IsFinded = tempFind.FindFile(sTempFileFind);while (IsFinded) {IsFinded = tempFind.FindNextFile(); if (!tempFind.IsDots()) {char sFoundFileName;strcpy(sFoundFileName,tempFind.GetFileName().GetBuffer(200)); if (tempFind.IsDirectory()) {char sTempDir;sprintf(sTempDir,"%s//%s",sDirName,sFoundFileName);DeleteDirectory(sTempDir);}else {char sTempFileName;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) { 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;}
页:
[1]