余辉脉脉 发表于 2017-6-3 14:26:27

递归创建目录、删除目录

递归创建目录、删除目录


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,&amp;sa)==TRUE); return Ret; } else return FALSE;}
页: [1]
查看完整版本: 递归创建目录、删除目录