首页 > 代码库 > 两个自己函数创建目录和删除目录,考虑了多级目录的情况
两个自己函数创建目录和删除目录,考虑了多级目录的情况
使用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);}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。