删除某个文件夹RemoveDirectory()
思想是RemoveDirectory()
只能删除一个空的目录,如果目录中有子目录或者是子文件的话就会删除失败的。解决的方法是递归的思想,将子文件删除,之后就可以调用这个函数删除一个空的文件夹了。
//删除某个文件夹 如果这个文件夹下面有子目录或者文件,统统删除。
void EnumDeleteFile
(
/*输入参数*/
TCHAR* szDir
)
{
WIN32_FIND_DATA findData;
TCHAR szDir_[MAX_PATH];
HANDLE hFind;
CString szDirCstring(szDir);
if (szDirCstring.ReverseFind('\\') == szDirCstring.GetLength() - 1) /* 最后一个字符是\ 则做删除处理*/
{
szDirCstring.Delete(szDirCstring.GetLength()-1,1);
SecureZeroMemory(szDir_,sizeof szDir_);
StringCchCopy(szDir_,MAX_PATH, szDirCstring.GetBuffer());
StringCchCopy(szDir,MAX_PATH, szDirCstring.GetBuffer());
}
else
{
SecureZeroMemory(szDir_, sizeof szDir_);
StringCchCopy(szDir_, MAX_PATH, szDir);
}
StringCchCat(szDir_,MAX_PATH,_T("\\*.*"));
hFind = FindFirstFile(szDir_,&findData);
if (INVALID_HANDLE_VALUE == hFind)
{
//此目录不存在!
return;
}
do
{
TCHAR lpSzDirOrFile[MAX_PATH];
if (!_tccmp(findData.cFileName, _T(".")) || !_tccmp(findData.cFileName, _T("..")))
continue;
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
SecureZeroMemory(lpSzDirOrFile, sizeof lpSzDirOrFile);
StringCchPrintf(lpSzDirOrFile, MAX_PATH, _T("%s\\%s"),szDir,findData.cFileName);
EnumDeleteFile(lpSzDirOrFile);
}
else
{
SecureZeroMemory(lpSzDirOrFile, sizeof lpSzDirOrFile);
StringCchPrintf(lpSzDirOrFile, MAX_PATH, _T("%s\\%s"), szDir, findData.cFileName);
wcout << lpSzDirOrFile << endl;
if (!DeleteFile(lpSzDirOrFile))
{
if (ERROR_ACCESS_DENIED == GetLastError()) //删除失败的原因,可能是文件是只读文件属性
{
SetFileAttributes(lpSzDirOrFile, FILE_ATTRIBUTE_NORMAL);
DeleteFile(lpSzDirOrFile);
}
}
}
} while (FindNextFile(hFind,&findData));
FindClose(hFind);
RemoveDirectory(szDir);
}
int _tmain(int argc,TCHAR* argv)
{
/*TCHAR* target_dir = _T("D:\\copyDestDirectory");
TCHAR ugii_root_dir[50] = {0};
GetEnvironmentVariable(_T("UGII_ROOT_DIR"), ugii_root_dir,50);
CreateDirectory(_T("D:\\copyDestDirectory"), NULL);
EnumCopyFile(ugii_root_dir, target_dir);*/
EnumDeleteFile(_T("D:\\copyDestDirectory"));
return 0;
}