首页 > 代码库 > 两个自己函数创建目录和删除目录,考虑了多级目录的情况

两个自己函数创建目录和删除目录,考虑了多级目录的情况

  使用shell api的话删除目录和创建目录都是非常简单的一个函数调用就可以,但是如果是使用为win32里面基本的函数的话,就稍微会复杂点。不过个人感觉shell api里面删除和创建目录的函数也是调用win32里面这些基本的函数。

  创建目录, 可以创建多级目录,代码拷过去稍稍修改可用:

int IPath::SetDirectory(LPCTSTR lptStr){    _stprintf_s(IPath::s_tszPath, _T("%s"), lptStr );    char* szPath=NULL;    W2C(&szPath, lptStr);    strcpy_s(IPath::s_szPath, szPath);    SAFE_ARRYDELETE(szPath);    //TCHAR* tszPath = IPath::s_tszPath;    TCHAR tszPath[MAX_PATH] = {0x0};    _tcscpy_s(tszPath, IPath::s_tszPath);    TCHAR* ptszTok = _tcstok(tszPath, _T("\\"));    TCHAR tszTempPath[MAX_PATH] = {\0};    while(ptszTok != NULL)    {        int pos = 0; //记录当前文件上一次目录结束位置(字符串中)        if (tszTempPath[0] == \0)        {            _tcscpy_s(tszTempPath, ptszTok);        }        else        {            pos = _tcslen(tszTempPath);            _stprintf_s(tszTempPath, _T("%s\\%s"), tszTempPath, ptszTok);        }            //res 0: 文件存在,        //      1:创建成功         //      -1:创建失败        int res = 0;         if (!CreateDirectory(tszTempPath, NULL))        {            if (GetLastError() == ERROR_ALREADY_EXISTS)                //文件夹已经存在                res = 0;            else                //创建失败                res = -1;        }        else            res = 1;        if (res >= 0)        {            //创建成功 或者文件存在            ptszTok =  _tcstok(NULL, _T("\\"));        }        else        {            //创建失败后 处理可以 删除 之前已经创建的            tszTempPath[pos] = \0;            RemoveDirectory(tszTempPath);            return DB_FAILED;                    }    }    return DB_OK;}

 

  删除目录,RemoveDirectory函数只能删除空文件夹, 所以伤处文件夹之前必须删除其子文件夹和文件,下面代码使用递归方法:

BOOL IPath::DeleteFolder(LPCTSTR lpstrFolder){    TCHAR tszFind[MAX_PATH] = {0x0};    WIN32_FIND_DATA wfd;    BOOL bRet ;    _tcscpy_s(tszFind, MAX_PATH, lpstrFolder);    _tcscat_s(tszFind, _T("\\*.*"));    HANDLE hFind  = FindFirstFile(tszFind, &wfd);    if (INVALID_HANDLE_VALUE =http://www.mamicode.com/= hFind)    {        return FALSE;    }    bRet = TRUE;    //遍历文件夹进行删除    while (bRet)    {        bRet = FindNextFile(hFind, &wfd);        //不是当前目录或者父目录        if (!bRet)        {            break;        }        _tcscpy_s(tszFind, MAX_PATH, lpstrFolder);        _tcscat_s(tszFind, _T("\\"));        _tcscat_s(tszFind, wfd.cFileName);        if (wfd.cFileName[0] != _T(.))        {#if _DEBUG            TCHAR tszPath[MAX_PATH] = {0x0};            wsprintf(tszPath,_T("%s\\%s\n"), lpstrFolder, wfd.cFileName);            OutputDebugString(tszPath);#endif                if (wfd.dwFileAttributes &  FILE_ATTRIBUTE_DIRECTORY)            {                //普通目录                DeleteFolder(tszFind);            }            else            {                if (!DeleteFile(tszFind))                {                    OutputDebugStringA("Delete fie failed \n");                    FindClose(hFind);                    return FALSE;                }                //文件            }        }        else            continue;    }    FindClose(hFind);    return  RemoveDirectory(lpstrFolder);}