VC和BCB项目临时文件清理工具

softman_2000 2012-02-03 10:14:59
功能和使用介绍:
清理VC和BCB项目生成的临时文件,方便打包,备份等。

使用很方便,采用ATL制作,注册dll之后,右键点击一个文件夹,选择“VC和BCB项目清理工具”菜单,会把此文件夹之下的所有临时文件列出来,再点击“删除”按钮即可。

下载地址:
http://download.csdn.net/detail/softman_2000/4042262
...全文
181 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dobzhansky 2012-02-08
  • 打赏
  • 举报
回复
最讨厌把 ncb 文件也留着就往 代码仓库中放的了
Lactoferrin 2012-02-08
  • 打赏
  • 举报
回复
和IDE的清理功能有什么区别
MagicFuzzX 2012-02-08
  • 打赏
  • 举报
回复

#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;
}


我是这样做的,然后编译放到要删除的文件夹下面
用户 昵称 2012-02-08
  • 打赏
  • 举报
回复
谢谢,俺一直手工写批处理,这下省事了。
buyong 2012-02-08
  • 打赏
  • 举报
回复
是否开源,不开源不敢用

2,586

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧