使用wcstok_s函数分割路径, 创建多级目录

论坛 期权论坛 脚本     
匿名技术用户   2021-1-2 00:29   11   0
实现代码如下:

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





分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP