判断目录是否存在,不存在则创建

来源:互联网 发布:淘宝怎么图片搜索 编辑:程序博客网 时间:2024/05/02 04:27

1、创建单级目录:

//此函数只能创建下一级目录,多级目录无法创建//检测路径若不存在则创建BOOL CDetectSystemApp::CheckCreatePath(CString strPathName){if(strPathName.Right(1)!="\\")strPathName+="\\";LPTSTR lpbuffer = new TCHAR[MAX_PATH];::GetCurrentDirectory(MAX_PATH,lpbuffer);if(!::SetCurrentDirectory(LPCTSTR(strPathName))){if(!::CreateDirectory(LPCTSTR(strPathName),NULL)){::SetCurrentDirectory(lpbuffer);delete lpbuffer;return FALSE;}}::SetCurrentDirectory(lpbuffer);delete lpbuffer;return TRUE;}


2、创建多级目录:

//目录是否存在,也可判断一个路径是否为文件夹BOOL CttDlg::FolderExists(CString strFolder){DWORD attr;   attr = GetFileAttributes(strFolder);  return (attr != (DWORD)(-1)) && (attr & FILE_ATTRIBUTE_DIRECTORY);   }//创建目录,可以多层创建;创建成功或者已存在,返回true; 否则返回falseBOOL CttDlg::CreateMtlDir(CString strPath){int nLen = strPath.GetLength();if (nLen < 2){return FALSE;  //如果字符串长度小于,则不是有效的路径格式。}if(_T('\\') == strPath[nLen-1])//删除末尾的"\\"{strPath = strPath.Left(nLen-1);nLen = strPath.GetLength();}if (nLen <= 0){return FALSE;}if (nLen <= 3) //如果长度<=3,那么必定是根目录格式{if (FolderExists(strPath)){return TRUE;//如果根目录存在,返回true;}else {return FALSE;//如果不存在,根目录是无法创建的,返回失败;}}if (FolderExists(strPath)){return TRUE;//如果目录存在,返回true;}// 分开父目录和本身目录名称CString Parent;Parent = strPath.Left(strPath.ReverseFind(_T('\\')));if(Parent.GetLength() <= 0){return FALSE; //目录名称错误}BOOL Ret = CreateMtlDir(Parent);  //递归创建父目录if(Ret)      // 父目录存在,直接创建目录{SECURITY_ATTRIBUTES sa;sa.nLength = sizeof(SECURITY_ATTRIBUTES);sa.lpSecurityDescriptor = NULL;sa.bInheritHandle = 0;Ret = (CreateDirectory(strPath,&sa) == TRUE);return Ret;}else{return FALSE;}}