- 注册时间
- 2011-3-6
- 最后登录
- 1970-1-1
该用户从未签到
|
递归创建目录、删除目录
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;} |
|