自己写了几个关于文件夹操作的函数,代码如下:
///////////////////////////////////////// // 删除目录及子目录下所有文件 // ///////////////////////////////////////// BOOL DeleteAllFileFromDirectoryW(LPCWSTR lpPath) { HANDLE hFind; WCHAR wzDeletePath[MAX_PATH] = { 0 }; WIN32_FIND_DATA findFileData; ZeroMemory(&findFileData, sizeof(WIN32_FIND_DATA)); //切换到要删除的路径 // _wchdir(lpPath); //检查路径是否以“\”结尾 // wcscpy_s(wzDeletePath, MAX_PATH, lpPath); if (L‘\\‘ != wzDeletePath[wcslen(wzDeletePath) - 1]) { wcscat_s(wzDeletePath, MAX_PATH, L"\\"); } //在路径后面添加通配符“*.*” // wcscat_s(wzDeletePath, MAX_PATH, L"*.*"); //寻找第一个文件 // hFind = FindFirstFileW(wzDeletePath, &findFileData); if (INVALID_HANDLE_VALUE == hFind) { //错误提示,路径不存在 return FALSE; } //开始遍历 // do { wcscpy_s(wzDeletePath, MAX_PATH, lpPath); wcscat_s(wzDeletePath, MAX_PATH, L"\\"); wcscat_s(wzDeletePath, MAX_PATH, findFileData.cFileName); //如果是目录,过滤掉“.”和“..”目录,递归遍历 // if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if ((0 == wcscmp(L".", findFileData.cFileName)) || (0 == wcscmp(L"..", findFileData.cFileName))) { continue; } //递归遍历 DeleteAllFileFromDirectoryW(wzDeletePath); } //文件,直接删除 // else { if (!DeleteFileW(wzDeletePath)) { //错误输出,删除文件失败 continue; } } } while (FindNextFileW(hFind, &findFileData)); FindClose(hFind); //文件夹遍历完毕后切换到父文件夹,删除此文件夹 // _wchdir(L".."); if (!RemoveDirectoryW(lpPath)) { //错误输出,删除文件夹失败 return FALSE; } return TRUE; } /////////////////////////////////////////// // 目录拷贝(目录下包含子目录) //// /////////////////////////////////////////// BOOL CopyDirectoryW(LPCWSTR lpSrcDir, LPCWSTR lpDesDir) { HANDLE hFind; WCHAR wzSrcDir[MAX_PATH] = { 0 }; WCHAR wzDesDir[MAX_PATH] = { 0 }; WCHAR wzTemp[MAX_PATH] = { 0 }; WIN32_FIND_DATA findFileData; ZeroMemory(&findFileData, sizeof(WIN32_FIND_DATA)); //检查路径是否以“\”结尾 // wcscpy_s(wzSrcDir, MAX_PATH, lpSrcDir); if (L‘\\‘ != wzSrcDir[wcslen(wzSrcDir) - 1]) { wcscat_s(wzSrcDir, MAX_PATH, L"\\"); } //在路径后面添加通配符“*.*” // wcscat_s(wzSrcDir, MAX_PATH, L"*.*"); //寻找第一个文件 // hFind = FindFirstFileW(wzSrcDir, &findFileData); if (INVALID_HANDLE_VALUE == hFind) { //错误提示,路径不存在 return FALSE; } //开始遍历 // do { wcscpy_s(wzSrcDir, MAX_PATH, lpSrcDir); wcscat_s(wzSrcDir, MAX_PATH, L"\\"); wcscat_s(wzSrcDir, MAX_PATH, findFileData.cFileName); wcscpy_s(wzDesDir, MAX_PATH, lpDesDir); wcscat_s(wzDesDir, MAX_PATH, L"\\"); wcscat_s(wzDesDir, MAX_PATH, findFileData.cFileName); //如果是目录,过滤掉“.”和“..”目录,递归遍历 // if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if ((0 == wcscmp(L".", findFileData.cFileName)) || (0 == wcscmp(L"..", findFileData.cFileName))) { continue; } //创建目标目录 if (!PathFileExistsW(wzDesDir)) { if (!CreateDirectoryW(wzDesDir, NULL)) { //错误输出,创建目录失败 continue; } } //递归遍历 CopyDirectoryW(wzSrcDir, wzDesDir); } //文件,直接拷贝 // else { if (!CopyFileW(wzSrcDir, wzDesDir, TRUE)) { //错误输出,拷贝文件失败 continue; } } } while (FindNextFileW(hFind, &findFileData)); FindClose(hFind); return TRUE; } //////////////////////////////////////// // 目录移动(目录下包含子目录) //// /////////////////////////////// //////// BOOL MoveDirectoryW(LPCWSTR lpSrcDir, LPCWSTR lpDesDir) { HANDLE hFind; WCHAR wzSrcDir[MAX_PATH] = { 0 }; WCHAR wzDesDir[MAX_PATH] = { 0 }; WCHAR wzTemp[MAX_PATH] = { 0 }; WIN32_FIND_DATA findFileData; ZeroMemory(&findFileData, sizeof(WIN32_FIND_DATA)); //切换到要移动的路径 // _wchdir(lpSrcDir); //检查路径是否以“\”结尾 // wcscpy_s(wzSrcDir, MAX_PATH, lpSrcDir); if (L‘\\‘ != wzSrcDir[wcslen(wzSrcDir) - 1]) { wcscat_s(wzSrcDir, MAX_PATH, L"\\"); } //在路径后面添加通配符“*.*” // wcscat_s(wzSrcDir, MAX_PATH, L"*.*"); //寻找第一个文件 // hFind = FindFirstFileW(wzSrcDir, &findFileData); if (INVALID_HANDLE_VALUE == hFind) { //错误提示,路径不存在 return FALSE; } //开始遍历 // do { wcscpy_s(wzSrcDir, MAX_PATH, lpSrcDir); wcscat_s(wzSrcDir, MAX_PATH, L"\\"); wcscat_s(wzSrcDir, MAX_PATH, findFileData.cFileName); wcscpy_s(wzDesDir, MAX_PATH, lpDesDir); wcscat_s(wzDesDir, MAX_PATH, L"\\"); wcscat_s(wzDesDir, MAX_PATH, findFileData.cFileName); //如果是目录,过滤掉“.”和“..”目录,递归遍历 // if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if ((0 == wcscmp(L".", findFileData.cFileName)) || (0 == wcscmp(L"..", findFileData.cFileName))) { continue; } //创建目标目录 if (!PathFileExistsW(wzDesDir)) { if (!CreateDirectoryW(wzDesDir, NULL)) { //错误输出,创建目录失败 continue; } } //递归遍历 MoveDirectoryW(wzSrcDir, wzDesDir); } //文件,直接移动 // else { if (!MoveFileW(wzSrcDir, wzDesDir)) { //错误输出,移动文件失败 continue; } } } while (FindNextFileW(hFind, &findFileData)); FindClose(hFind); //文件夹遍历完毕后切换到父文件夹,删除此文件夹 // _wchdir(L".."); if (!RemoveDirectoryW(lpSrcDir)) { //错误输出,删除文件夹失败 return FALSE; } return TRUE; }
时间: 2024-10-13 16:19:37