使用shell api的話刪除目錄和建立目錄都是很是簡單的一個函數調用就能夠,可是若是是使用爲win32裏面基本的函數的話,就稍微會複雜點。不過我的感受shell api裏面刪除和建立目錄的函數也是調用win32裏面這些基本的函數。shell
建立目錄, 能夠建立多級目錄,代碼拷過去稍稍修改可用:api
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 == 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); }