void DelDir(CString dir)
{
WIN32_FIND_DATA Sr;
HANDLE Handle;
int iattr;
//如果是目录
iattr=GetFileAttributes(dir);
if(iattr==FILE_ATTRIBUTE_DIRECTORY) //如果是文件夹,或者if(iattr & FILE_ATTRIBUTE_DIRECTORY)
{
try
{
Handle=::FindFirstFile(dir+_T("\\*.*"),&Sr);
}
catch(...)
{
return;
}
if (Handle)
{
do
{
if (Sr.cFileName[0]!='.')
{
if(Sr.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY) //如果是文件夹
{
DelDir(dir+_T("\\")+Sr.cFileName);
}
else
{
::SetFileAttributes(dir+_T("\\")+Sr.cFileName,0);
::DeleteFile(dir+_T("\\")+Sr.cFileName);
}
}
} while (::FindNextFile(Handle,&Sr));
::FindClose(Handle);
}
if(iattr==FILE_ATTRIBUTE_DIRECTORY)
::RemoveDirectory(dir);
}
else
{
::SetFileAttributes(dir,0);
::DeleteFile(dir);
}
}
有可能出现“winbase.h(253): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默“的错误
注意头文件调用的先后顺序
#include "stdafx.h"
#include <atlstr.h>
#include <winbase.h>
void DelFile(CString dir);
int _tmain(int argc, _TCHAR* argv[])
{
DelFile(_T("D:\\test")); //双斜杠
return 0;
}