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; 否则返回false
BOOL 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;
}
}