CStringList* g_pslDir = NULL;
CStringList* g_pslFile = NULL;
void main()
{
g_pslDir = new CStringList;
g_pslFile = new CStringList;
g_pslDir->AddHead( GetPathName() );
if ( RemoveAll( strDir ) )
{
delete g_pslFile;
delete g_pslDir;
}
}
//删除文件夹
BOOL RemoveDir(CString strDir)
{
if ( strDir.GetLength() != 0 )
{
char* szDir = ( char* )( LPCSTR )( LPCTSTR )strDir;
if ( _rmdir( szDir ) == 0 )
return TRUE;
else
return FALSE;
}
return FALSE;
}
//获取系统目录
char* GetPathName()
{
char szPath[MAX_PATH] = {0};
if ( GetModuleFileName( NULL, szPath, MAX_PATH ) <= 0 )
{
return "";
}
int i = MAX_PATH - 1;
int j = 0;
while ( i > 2 )
{
if ( szPath[i--] == '//' )
{
j++;
}
if ( j == 1 )
{
break;
}
}
szPath[i+1] = '/0';
return szPath;
}
//删除文件
BOOL RemoveFile(CString strFileName)
{
if ( strFileName.GetLength() != 0 && strFileName.Right( 4 ).Left( 1 ) == '.' )
{
CFile file;
file.Remove( ( char* )( LPCSTR )( LPCTSTR )strFileName );
return TRUE;
}
return FALSE;
}
//遍历整个数据文件目录
int SereachPath(CString strPath)
{
WIN32_FIND_DATA find_data;
HANDLE hFindHandle;
CString strNewPath = strPath + "//*";
CString strDir;
hFindHandle = FindFirstFile( ( char* )( LPCSTR )( LPCTSTR )strNewPath, &find_data );
if ( INVALID_HANDLE_VALUE == hFindHandle )
{
return RT_ERROR;
}
do
{
if ( FILE_ATTRIBUTE_DIRECTORY & find_data.dwFileAttributes )
{
if ( ( strcmp( find_data.cFileName, "." ) != 0 ) && ( strcmp( find_data.cFileName, ".." ) != 0 ) )
{
if ( strNewPath.Right( 1 ) == '*' )
{
strNewPath.Delete( strNewPath.GetLength() - 1, 1 );
}
strDir = strNewPath + find_data.cFileName;
g_pslDir->AddHead( strDir );
SereachPath( strDir );
}
}
else
{
if ( strNewPath.Right( 1 ) == '*' )
strNewPath.Delete( strNewPath.GetLength() - 1, 1 );
g_pslFile->AddHead( strNewPath + ( CString )find_data.cFileName );
}
memset( &find_data, 0, sizeof( WIN32_FIND_DATA ) );
} while ( FindNextFile( hFindHandle, &find_data ) );
FindClose( hFindHandle );
return RT_OK;
}
BOOL RemoveAll(const CString strDataPath)
{
SereachPath( strDataPath );
int nFileNum = g_pslFile->GetCount(),
nDirNum = g_pslDir->GetCount();
for ( int num=0; num<nFileNum; num++ )
{
if ( RemoveFile( g_pslFile->GetHead() ) )
g_pslFile->RemoveHead();
else
continue;
}
for ( num=0; num<nDirNum; num++ )
{
if ( RemoveDir( g_pslDir->GetHead() ) )
g_pslDir->RemoveHead();
else
continue;
}
return TRUE;
}