wince的实现不支持CFileFind 使用FindFirstFile FindNextFile实现
BOOL DeleteDirectory_R(LPCTSTR psDirName)
{WIN32_FIND_DATA FindFileData;
memset(FindFileData.cFileName, 0, sizeof(FindFileData.cFileName));
TCHAR sTempFileFind[ _MAX_PATH ] = { 0 };
_stprintf(sTempFileFind, L"%s\\*.*",psDirName);
HANDLE hFind = FindFirstFile(sTempFileFind, &FindFileData);
if (hFind != INVALID_HANDLE_VALUE)
{
do
{
DWORD dwDirAttr = FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
//strcmp(chName, ".") != 0 && strcmp(chName, "..") != 0
if (FindFileData.cFileName[0] != L'.')
{
if (FILE_ATTRIBUTE_DIRECTORY != dwDirAttr)
{
TCHAR fileName[MAX_PATH] = {0};
_stprintf(fileName, L"%s\\%s", psDirName, FindFileData.cFileName);
RemoveFileReadOnlyAttr(fileName);
DeleteFile(fileName);
}else
{
TCHAR sDirName[ _MAX_PATH ] = { 0 };
_stprintf(sDirName, L"%s\\%s",psDirName, FindFileData.cFileName);
RemoveFileReadOnlyAttr(sDirName);
DeleteDirectory_R(sDirName);
}
}
}while(::FindNextFile(hFind, &FindFileData));
FindClose(hFind);
}
if(!RemoveDirectory(psDirName)) //空文件夹
{
return FALSE;
}
return TRUE;
}
CFileFind 的实现
BOOL DeleteDirectory_R(LPCTSTR psDirName)
{
CFileFind tempFind;
TCHAR sTempFileFind[ _MAX_PATH ] = { 0 };
_stprintf(sTempFileFind, L"%s\\*.*",psDirName);
BOOL IsFinded = tempFind.FindFile(sTempFileFind);
while (IsFinded)
{
IsFinded = tempFind.FindNextFile();
if (!tempFind.IsDots())
{
TCHAR sFoundFileName[ _MAX_PATH ] = { 0 };
_tcscpy(sFoundFileName,tempFind.GetFileName().GetBuffer(200));
if (tempFind.IsDirectory())
{
TCHAR sTempDir[ _MAX_PATH ] = { 0 };
_stprintf(sTempDir, L"%s\\%s",psDirName,sFoundFileName);
DeleteDirectory_R(sTempDir);
}
else
{
TCHAR sTempFileName[ _MAX_PATH ] = { 0 };
_stprintf(sTempFileName, L"%s\\%s",psDirName,sFoundFileName);
RemoveFileReadOnlyAttr(sTempFileName);
DeleteFile(sTempFileName);
}
}
}
tempFind.Close();
if(!RemoveDirectory(psDirName))
{
return FALSE;
}
return TRUE;
}
去除文件只读属性
BOOL RemoveFileReadOnlyAttr(LPCTSTR pFilePath)
{
ASSERT(NULL != pFilePath);
DWORD dwAttr = GetFileAttributes(pFilePath);
if (0xFFFFFFFF == dwAttr)
{
return FALSE;
}
if (dwAttr & FILE_ATTRIBUTE_READONLY)
{
dwAttr &= ~FILE_ATTRIBUTE_READONLY;
SetFileAttributes(pFilePath, dwAttr);
}
return TRUE;
}