在VC中要创建目录时,常用CreateDirectory这个API,但这个API有点弱处,即不能创建深层次的目录,只能一级一级的创建。看到有人写的代码里面,凡是需要这个函数的地方,不断的查找"\\",不断的调用CreateDirectory,感觉有点纠结,代码重复太多。何不自定义一个函数,能递归的创建多层次的目录呢?以后只需要这个就可以了。
例如,可以直接创建D:\test\project\log,CreateDeepDirectory("D:\test\project\log");就不需要调用3次CreateDirectory。个人感觉代码更简短易读了。
代码如下:
参数与CreateDirectory一模一样
BOOL CreateDeepDirectory(LPCTSTR lpPathName, //directory name
LPSECURITY_ATTRIBUTES lpSecurityAttributes // SD
)
{
if(PathFileExists(lpPathName)) //如果目录已存在,直接返回
{
return TRUE;
}
CString strPath = "";
char pszSrc[MAX_PATH] = {0};
strcpy(pszSrc, lpPathName);
char *ptoken = strtok(pszSrc, "\\");
while(ptoken)
{
strPath += ptoken;
strPath += "\\";
if(!PathFileExists(strPath))
if(!CreateDirectory(strPath, lpSecurityAttributes))
{
DWORD dw = GetLastError();
CString strErr;
strErr.Format("CreateDirectory Failed: %d", dw);
AfxMessageBox(strErr);
return FALSE;
}
}
ptoken = strtok(NULL, "\\");
}
return TRUE;
}