首页 > 代码库 > CodeFolderClear 自动清理代码文件夹下无用文件的小程序及源码

CodeFolderClear 自动清理代码文件夹下无用文件的小程序及源码

最近常要用U盘拷贝代码,发现编译器生成的各种中间文件占用了大量的空间,手工删除起来费时费力,所以就萌生了写一个小工具搞定这一切都念头。

说干就干,晚上熬夜搞定!

小工具程序及源码工程的下载链接:    点击下载


用简单的方式进行处理,递归删除。下面统计量下要删除的文件:

工程目录下: 工程目录的判断依据: 有工程文件 *.vcxproj
    *.sdf
    *.suo
    *.user
 
    生成目录(Debug/Release等)下的文件:
        *.obj
        *.cache
        *.exp
        *.ilk
        *.lastbuildstate
        *.map
        *.pch
        *.tlog
        *.idb
        *.embed.manifest.res
        *_manifest.rc
        BuildLog.htm
        
        下面的这些文件只有是在生成目录下的时候才能删除,其它目录下的时候不能删除.
        *.log
        *.pdb
        *.dll
        *.ocx
        *.lib
        *.exe


下面是代码,就一个文件:

#pragma once

#include <Windows.h>
#include <tchar.h>
#include <iostream>

using namespace std;

// 可以直接删除的文件.
const wchar_t* DirectDeleteFileExt[] =
{
	L".sdf",
	L".suo",
	L".user",

	L".obj",
	L".cache",
	L".exp",
	L".ilk",
	L".lastbuildstate",
	L".map",
	L".pch",
	L".ipch",
	L".tlog",
	L".idb",
	L".embed.manifest.res",
	L".embed.manifest",
	L".intermediate.manifest",
	L"_manifest.rc",
	L"BuildLog.htm",

	0
};

// 生成目录下可以删除的文件.
const wchar_t* BuildDirDeleteFileExt[] =
{
	L".log",
	L".pdb",
	L".dll",
	L".ocx",
	L".lib",
	L".exe",
	0
};

bool DelFile( const wchar_t* fileName)
{
	SetFileAttributesW( fileName,FILE_ATTRIBUTE_NORMAL);
	if(DeleteFileW( fileName) )
	{
		return true;
	}
	else
	{
		return false;
	}
}

bool IsFileNameMatch( const wstring& fileName, const wchar_t* pExt )
{
	int offset = fileName.length() - wcslen( pExt );
	if ( offset < 0 )
	{
		return false;
	}
	for ( size_t i=offset;i < fileName.length(); ++i )
	{
		if ( tolower( fileName[i] ) != tolower( pExt[i-offset]) )
		{
			return false;	// 不想等.
		}
	}

	return true;
}

bool IsFileNameMatch( const wstring& fileName, const wchar_t** ppExt )
{
	while( *ppExt )
	{
		if ( IsFileNameMatch( fileName, *ppExt ) )
		{
			return true;
		}

		ppExt++;
	}
	return false;
}


// 文件是否可以直接删除.
bool IsFileDirectDeleted( const wstring& fileName )
{
	return IsFileNameMatch( fileName, DirectDeleteFileExt );
}

// 文件是否可以在生成目录下删除.


bool ClearFolder( const wstring& folderPath, bool isProjectDir = false )
{
	wstring keyWord = folderPath;
	keyWord += L"\\*";
	WIN32_FIND_DATAW fdata = http://www.mamicode.com/{0};  >