功能和使用介绍:
清理VC和BCB项目生成的临时文件,方便打包,备份等。使用很方便,采用ATL制作,注册dll之后,右键点击一个文件夹,选择“VC和BCB项目清理工具”菜单,会把此文件夹之下的所有临时文件列出来,再点击“删除”按钮即可。下载地址:
http://download.csdn.net/detail/softman_2000/4042262

解决方案 »

  1.   


    #include <windows.h>
    #include <tchar.h>
    #include <Shlwapi.h>
    #pragma comment(lib,"Shlwapi.lib")TCHAR* szSuffix[] = {TEXT(".suo"),TEXT(".ncb"),TEXT(".user"),TEXT(".pdb"),TEXT(".obj"),TEXT("Readme.txt"),TEXT("ReadMe.txt"),TEXT(".aps"),TEXT(".idb"),
    TEXT(".ilk"),TEXT(".plg"),TEXT(".opt"),TEXT(".sbr"),TEXT(".pch"),TEXT(".sdf"),TEXT(".netmodule"),TEXT(".db"),TEXT(".bsc"),TEXT(".old"),TEXT("PREfast"),
    TEXT("buildchk"),TEXT("BuildLog"),TEXT("buildfre"),TEXT("prefast")};TCHAR* szDir[] = {TEXT("\\.svn"),TEXT("\\debug"),TEXT("\\Debug"),TEXT("\\Release"),TEXT("\\release"),TEXT("\\ipch"),TEXT("\\Bin"),TEXT("\\Obj"),
    TEXT("objchk"),TEXT("objfre")};TCHAR szLongPath [MAX_PATH] = TEXT("");//本程序所在文件夹路径
    TCHAR szLongFile [MAX_PATH] = TEXT("");//本程序自身路径//判断是不是可以删除的后缀名
    BOOL CheckSuffix(LPCTSTR lpFilePath)
    {
    LPCTSTR tmp = NULL;
    int i;
    for(i = 0; i < ( sizeof( szSuffix ) / sizeof( TCHAR* ) ); i++ )
    {
    tmp = _tcsstr(lpFilePath,szSuffix[i]);
    if (tmp != NULL)
    {
    return TRUE;
    }
    }
    return FALSE;}//判断是不是可以删除的文件夹
    //从后面开始判断
    BOOL CheckDiretory(LPCTSTR lpDirPath)
    {
    LPCTSTR tmp = NULL;
    int i;
    for( i = 0; i < ( sizeof( szDir ) / sizeof( TCHAR* ) ); i++ )
    {
    tmp = _tcsstr(lpDirPath,szDir[i]);
    if (tmp != NULL)
    {
    return TRUE;
    }
    }
    return FALSE;
    }//删除文件夹和文件
    BOOL DelFileToRecycle(LPCTSTR lpSourceFile)
    {
    SHFILEOPSTRUCT shFile;
    TCHAR FilepathName[MAX_PATH];
    int len = 0;
    _stprintf_s(FilepathName,MAX_PATH,TEXT("%s"),lpSourceFile); len = lstrlen(FilepathName);   
    FilepathName[len] = '\0';   
    FilepathName[len+1] = '\0'; ZeroMemory(&shFile,sizeof(shFile));
    shFile.pFrom = FilepathName;
    shFile.wFunc = FO_DELETE;
    //静默,保留撤销(回收站),取消警告
    shFile.fFlags =FOF_SILENT|FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
    if (SHFileOperation(&shFile) != 0 )
    {
    return FALSE;
    }
    return TRUE;
    }//获取本清理程序所在的路径
    void GetSelfPath()

    TCHAR szbufPath [MAX_PATH] = TEXT("");
    LPCTSTR lpTemp = NULL;
    GetModuleFileName(NULL,szbufPath,MAX_PATH); 
    GetLongPathName(szbufPath,szLongPath,MAX_PATH); 
    GetLongPathName(szbufPath,szLongFile,MAX_PATH);
    lpTemp = _tcsrchr(szLongPath,'\\');
    *_tcsstr(szLongPath,lpTemp) = 0;
    }//搜索并且删除垃圾文件
    void SearchAndDelete(LPTSTR lpCurrentDir)
    {
    WIN32_FIND_DATA FindFileData;
    HANDLE hListFile;
    TCHAR szFullPath[MAX_PATH] = TEXT("");
    TCHAR szFilePath[MAX_PATH] = TEXT("");
    BOOL bIsRootPath = FALSE; lstrcpy(szFilePath, lpCurrentDir);
    lstrcat(szFilePath, TEXT("\\*")); hListFile = FindFirstFile(szFilePath,&FindFileData);
    if(hListFile != INVALID_HANDLE_VALUE)
    {
    do
    {
    if(lstrcmp(FindFileData.cFileName,TEXT(".")) == 0||lstrcmp(FindFileData.cFileName,TEXT("..")) == 0)
    {
    continue;
    } bIsRootPath = PathIsRoot(lpCurrentDir);
    if (TRUE == bIsRootPath)
    {
    _stprintf_s(szFullPath,MAX_PATH,TEXT("%s%s"),lpCurrentDir,FindFileData.cFileName);
    }
    else
    {
    _stprintf_s(szFullPath,MAX_PATH,TEXT("%s\\%s"),lpCurrentDir,FindFileData.cFileName);
    } if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
    {
    if (CheckDiretory(szFullPath))
    {
    DelFileToRecycle(szFullPath);
    }
    SearchAndDelete(szFullPath);
    }
    else
    {
    //这里删除文件
    if (lstrcmp(szLongFile,szFullPath) != 0)//自身跳过
    {
    if (CheckSuffix(szFullPath))
    {
    DelFileToRecycle(szFullPath);
    }
    }
    }
    }
    while(FindNextFile(hListFile, &FindFileData));
    }
    FindClose(hListFile);
    }int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
    {
    GetSelfPath();
    SearchAndDelete(szLongPath);
    return 0;
    }
    我是这样做的,然后编译放到要删除的文件夹下面
      

  2.   

    最讨厌把 ncb 文件也留着就往 代码仓库中放的了