c++创建多级目录
自己写的创建多级目录函数
npszPath 目录字符串,调用方法如下:
TCHAR *lCreate = L".\\test\\test1\\test2";
CreateMultipleDir(lCreate);
bool CreateMultipleDir(TCHAR* npszPath)
{
bool liRet = true;
do
{
TCHAR * lpPath = NULL;
TCHAR ltcPath[MAX_PATH] = {0};
wcscpy_s(ltcPath,npszPath);
lpPath = StrRChr(ltcPath,ltcPath+wcslen(ltcPath),'\\');//从末尾查找'\'
if (lpPath ==NULL)//目录中不含有'\'
{
if(CreateDirectory(ltcPath,NULL)==0)//创建目录
{
int lierr = GetLastError();
if (lierr != ERROR_ALREADY_EXISTS)//目录已经存在
{
OutputDebugString(L"创建失败");
}
}
break;
}
else
{
TCHAR ltcNextPath[MAX_PATH] = {0};
wcscpy_s(ltcNextPath,npszPath);
*(StrRChr(ltcNextPath,ltcNextPath+wcslen(ltcNextPath),'\\')) = UNICODE_NULL;//从末尾查找第一个'\',取'\'前面的部分
CreateMultipleDir(ltcNextPath);
if(CreateDirectory(npszPath,NULL)==0)
{
int lierr = GetLastError();
if (lierr != ERROR_ALREADY_EXISTS)
{
OutputDebugString(L"创建失败");
}
}
}
} while (false);
return liRet;
}
另一种方法
//创建多级目录
bool CreateMultipleDirectory(wchar_t* npszPath)
{
bool bRet = false;
wchar_t lszCreatePath[MAX_PATH] = {0};
wchar_t* lpszOffset = NULL;
wchar_t* lpszCreatePathOffset = lszCreatePath;
do
{
if(npszPath == NULL)
break;
lpszOffset = npszPath;
int liCount = 0;
while (*lpszOffset != L'\0' && liCount++ < MAX_PATH-1)
{
*lpszCreatePathOffset++ = *lpszOffset++;
if(*lpszOffset == L'\\' || *lpszOffset == L'\0') //如果到一级目录了,或到结尾了,就尝试创建这层目录
{
if(*(lpszCreatePathOffset-1) == L':')
continue; //如果是磁盘,就继续
if(CreateDirectory(lszCreatePath,NULL) == FALSE && GetLastError() != ERROR_ALREADY_EXISTS) //创建目录
return false;
}
}
bRet = true;
} while (false);
return bRet;
}