하위 디렉토리나 하위 파일을 포함하는 디렉토리를 삭제하는 함수입니다.
int DeleteAllFiles(LPCWSTR szDir, int recur) { HANDLE hSrch; WIN32_FIND_DATA wfd; int res = 1; TCHAR DelPath[MAX_PATH]; TCHAR FullPath[MAX_PATH]; TCHAR TempPath[MAX_PATH]; lstrcpy(DelPath, szDir); lstrcpy(TempPath, szDir); if (lstrcmp(DelPath + lstrlen(DelPath) - 4, _T("\\*.*")) != 0) { lstrcat(DelPath, _T("\\*.*")); } hSrch = FindFirstFile(DelPath, &wfd); if (hSrch == INVALID_HANDLE_VALUE) { if (recur > 0) RemoveDirectory(TempPath); return -1; } while(res) { wsprintf(FullPath, _T("%s\\%s"), TempPath, wfd.cFileName); if (wfd.dwFileAttributes & FILE_ATTRIBUTE_READONLY) { SetFileAttributes(FullPath, FILE_ATTRIBUTE_NORMAL); } if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (lstrcmp(wfd.cFileName, _T(".")) && lstrcmp(wfd.cFileName, _T(".."))) { recur++; DeleteAllFiles(FullPath, recur); recur--; } } else { DeleteFile(FullPath); } res = FindNextFile(hSrch, &wfd); } FindClose(hSrch); if (recur > 0) RemoveDirectory(TempPath); return 0; }
성공하면 0을 반환하고 그렇지 않다면 -1을 반환. 인자인 recur이 1이면 szDir로 지정된 디렉토리 자체도 삭제하고 0이라면 szDir로 지정된 디렉토리 자체는 삭제하지 않습니다. 참고로 이 함수는 제가 만드거 아니고 인터넷에서 찾은 것인데 출처를 몰라 =_=; 여튼, 좋은 함수 제공해 주셔서 감사합니다 !