实现代码如下:
enum {RCODE_PASS = 0,RCODE_FAIL = 255}; int CreateMutilFolder(LPTSTR szFolder); int JudgeFolderIsExist(LPTSTR szFolder) { if (!PathIsDirectory(szFolder)) { CreateMutilFolder(szFolder); } return RCODE_PASS; } int CreateMutilFolder(LPTSTR szFolder) { int m_ret = RCODE_PASS; size_t m_len = wcslen(szFolder); TCHAR* m_szFolder = new TCHAR[m_len+1]; TCHAR* m_szTemp = new TCHAR[m_len+10]; ZeroMemory(m_szFolder,m_len+1); ZeroMemory(m_szTemp,m_len+10); if(swprintf_s(m_szFolder,m_len+1,L"%s",szFolder) != m_len) { wprintf(L"[Error]: JudgeFolderIsExist-swprintf_s fail(errorcode == %ld)\n",GetLastError()); m_ret = RCODE_FAIL; goto _func_exit_; } //wprintf(L"path: %s\n",m_szFolder); TCHAR *seps = L"/\\"; TCHAR *token = NULL; TCHAR *next_token = NULL; token = wcstok_s(m_szFolder,seps,&next_token); while (NULL != token) { // wprintf(L"%s\n",token); if(wcscat_s(m_szTemp,m_len+10,token) == 0 && wcscat_s(m_szTemp,m_len+10,L"\\") == 0) { if (!PathIsDirectory(m_szTemp)) { if (!CreateDirectory(m_szTemp,NULL)) { wprintf(L"[Error]: CreateMutilFolder-CreateDirectory(%s) fail(errorcode == %ld)\n",m_szTemp,GetLastError()); m_ret = RCODE_FAIL; goto _func_exit_; } } } else { wprintf(L"[Error]: CreateMutilFolder-wcscat_s fail(errorcode == %ld)\n",GetLastError()); m_ret = RCODE_FAIL; goto _func_exit_; } token = wcstok_s(NULL,seps,&next_token); } _func_exit_: if (NULL != m_szFolder) { delete m_szFolder; m_szFolder = NULL; } if (NULL != m_szTemp) { delete m_szTemp; m_szTemp = NULL; } return RCODE_PASS; }