#define STRCATC(x,c) len=strlen(x); \
x[len++]=c; \
x[len]=0;
#define RevisePath(x) len=strlen(x); if (len && x[len-1]!='\\'){ x[len]='\\'; x[len+1]=NULL;}
void DeleteTree(char* szPath)
{
WIN32_FIND_DATAA t;
HANDLE hFind = NULL;
char inPath[MAX_PATH*2];
char Path[MAX_PATH*2];
int len;
RevisePath(szPath);
strcpy(Path, szPath);
RevisePath(Path);
STRCATC(Path,'*');
// 如果没有进行第一次查找
// 则调用_findfirst("*", &t);
// 否则,调用_findnext( lFind, &t)
// 然后再通过这2种查找函数的调用结果返回是否继续循环
while(hFind==NULL?(hFind=::FindFirstFile(Path, &t))!=INVALID_HANDLE_VALUE:(TRUE == ::FindNextFile( hFind, &t)))
{
if( t.cFileName[0] == '.')
{
continue;
}
if( t.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
{
//遍历子目录
strcpy(inPath,szPath); RevisePath(inPath);
strcat(inPath,t.cFileName);
STRCATC(inPath, '\\');
DeleteTree(inPath);
}else{
strcpy(inPath,szPath); RevisePath(inPath);
strcat(inPath,t.cFileName);
::DeleteFile(inPath);
}
}
FindClose(hFind);
::RemoveDirectory(szPath);
}