void delete_directory(const CString &dir_path)
{
CFileFind f;
BOOL bFind = f.FindFile(dir_path + _T("*.*"));
while(bFind)
{
bFind = f.FindNextFile();
if(f.IsDots()) continue;
SetFileAttributes(f.GetFilePath(), FILE_ATTRIBUTE_NORMAL);
if(f.IsDirectory())
{
delete_directory(dir_path + f.GetFileName() + _T("\\"));
}
else
{
//DWORD fileAttributes = GetFileAttributes(dir_path + f.GetFileName());
//fileAttributes &= ~FILE_ATTRIBUTE_READONLY;
//SetFileAttributes(dir_path + f.GetFileName(), fileAttributes);
DeleteFile(dir_path + f.GetFileName());
LogMsg("[%s %d]delete file %s", __FUNCTION__, __LINE__,CString2string(dir_path + f.GetFileName()).c_str());
}
}
f.Close(); //关闭句柄
SetFileAttributes(dir_path.Left(dir_path.GetLength() - 1), FILE_ATTRIBUTE_NORMAL);
RemoveDirectory(dir_path.Left(dir_path.GetLength() - 1));
LogMsg("[%s %d]delete dir %s", __FUNCTION__, __LINE__,CString2string(dir_path.Left(dir_path.GetLength() - 1)).c_str());
}
删除非空目录本来不是问题,可是今天问到问题是怎么也无法将最外层的目录删除,里面的目录及文件都能删除。
一开始以为是权限问题,所以在代码中加入了权限设置,但问题依旧
思考了半天,原来是句柄没关闭。最后加上简单的一句
f.Close();
就好了,真是快崩溃了,所以特此mark下。
以上实现主要采用了DeleteFile和RemoveDirectory来实现