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

16 篇文章 0 订阅

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;
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值