windows垃圾清理源代码 C/C++

//cleanDos2011.5.31.3.cpp
//win32控制台程序,界面做不出来
//没有严格测试过      

#include <windows.h>
#include <stdio.h>
#include <string.h>


DWORD Total = 0;		 //文件和目录数量
DWORD dwFile = 0;		 //文件数量
DWORD dwFolder = 0;		 //所文件夹数量
DWORD dwDeleteFile = 0;  //删除文件数量
   


//公共
VOID  TimeDifference(SYSTEMTIME StOld, SYSTEMTIME StNow);//时差
VOID  Show(VOID);
DWORD FindDirFile(LPSTR szPath);				   //遍历文件和目录
DWORD DeleteFileSuffix(LPSTR szPath, LPSTR Suffix);//删除特定后缀文件		//这有时删的干净,有时删不干净,本来是想删文件夹的,
DWORD DeleteDirFile(LPSTR szPath);				   //删除文件夹里的文件		//后面发现RemoveDirectory()只能删空文件夹,导致路径错误,就不要了.
VOID  Clear0(DWORD *Total, DWORD *dwFile, DWORD *dwFolder, DWORD *dwDeleteFile);
VOID  OS_Version(CHAR *szVersionInfo);

//1
VOID GetSystemDir(VOID); //获取系统位置
VOID SystemInfo(VOID);   //获取系统信息
VOID GetTime(VOID);		 //获取时间
VOID SpaceSize(CHAR  *RootPathName);
VOID PrintSpaceSize();
VOID AllSystemInfo(VOID);

//2
VOID DeleteRubbish(VOID);	 //删除垃圾文件


//3
VOID QQClean(VOID);//Win7 / XP
//VOID GetUserNameDocuments(LPSTR c);//获取用户名

//4
VOID StatisticsFile(VOID);//统计
VOID Conversion(CHAR* c); //格式转化

//5清理痕迹
VOID DeleteTrace(VOID);

VOID Show(VOID)
{
	printf("\n1: 系统信息\t");
	printf("2:垃圾清理\t");
	printf("3: QQ还原\t\n");
	printf("4: 统计文件\t");
	printf("5: 清理痕迹\t");
	printf("其他: 退出\n\n");
}


VOID GetSystemDir()
{	
	CHAR UserName[MAX_PATH];
	DWORD dw = MAX_PATH;

	GetUserName(UserName, &dw);
	printf("用户名: %s\n", UserName);

	CHAR SystemDir[MAX_PATH];
	CHAR WindowDir[MAX_PATH];

	GetSystemDirectory(SystemDir, MAX_PATH);
	GetWindowsDirectory(WindowDir, MAX_PATH);

	printf("系统目录:%s\nWindows目录:%s", SystemDir, WindowDir);

}


VOID SystemInfo()
{
	SYSTEM_INFO SysInfo;
	GetSystemInfo(&SysInfo);

	printf("\n内存分页大小: 0x%.8X", SysInfo.dwPageSize);
	printf("\n可用内存起始: 0x%.8x", SysInfo.lpMinimumApplicationAddress);
	printf("\n可用内存结束: 0x%.8x", SysInfo.lpMaximumApplicationAddress);
	printf("\nCPU个数: %d", SysInfo.dwNumberOfProcessors);

	printf("\nCPU类型: ");
	switch (SysInfo.dwProcessorType)
	{
	case PROCESSOR_INTEL_386:
		printf("386\n");
		break;
	case PROCESSOR_INTEL_486:
		printf("486\n");
		break;
	case PROCESSOR_INTEL_PENTIUM:
		printf("pentium, Cpu Model 0x%.2X, Stepping 0x%.2X\n",(BYTE)(SysInfo.wProcessorRevision>>8), (BYTE)SysInfo.wProcessorRevision);
		break;	
	case PROCESSOR_INTEL_IA64:
		printf("IA64\n");
		break;
	case PROCESSOR_AMD_X8664:
		printf("AMD x86 64\n");
		break;
	}

	printf("处理器架构: ");
	switch (SysInfo.wProcessorArchitecture)
	{
	case PROCESSOR_ARCHITECTURE_INTEL:
		printf("intel");
		printf(" CPU vendor is %d\n",SysInfo.wProcessorLevel);
		break;
	case PROCESSOR_ARCHITECTURE_IA64:
		printf("64 bits intel\n");
		break;
	case PROCESSOR_ARCHITECTURE_AMD64:
		printf("64 bits AMD\n");
		break;
	case PROCESSOR_ARCHITECTURE_UNKNOWN:
		printf("UNKNOWN\n");
		break;
	}

}


VOID GetTime()
{
	SYSTEMTIME st;
	// 获取时间
	GetLocalTime( &st );
	printf("日期:  %d-%d-%d\n", st.wYear, st.wMonth, st.wDay);
	printf("时间:  %d:%d:%d\n", st.wHour, st.wMinute, st.wSecond);
	printf("已开机: %d分钟", GetTickCount()/1000/60);
	
}


VOID OS_Version(CHAR *szVersionInfo)
{
	OSVERSIONINFO OS;

	// 设置参数大小,调用并判断是否成功
	OS.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	if(!GetVersionEx(&OS))
	{
		printf("error %d\n",GetLastError());
		return;
	}
	switch(OS.dwMajorVersion)
	{
	case 5:
			switch(OS.dwMinorVersion)
			{
			case 0:
				lstrcat(szVersionInfo,"2000");
				break;
			case 1:
				lstrcat(szVersionInfo,"XP");
				break;
			case 2:
				lstrcat(szVersionInfo,"Server 2003");
				break;
			}
		break;

	case 6:
			switch(OS.dwMinorVersion)
			{
			case 0:
				lstrcat(szVersionInfo,"Vista");
				break;
			case 1:
				lstrcat(szVersionInfo,"7");
				break;
			}
		break;
	}
}


VOID SpaceSize(CHAR  *RootPathName)
{
	
    DWORD SectorsPerCluster;
    DWORD BytesPerSector;
    DWORD NumberOfFreeClusters;
    DWORD TotalNumberOfClusters;	


	GetDiskFreeSpace(
		RootPathName,			
		&SectorsPerCluster,
		&BytesPerSector,
		&NumberOfFreeClusters,
		&TotalNumberOfClusters	
		);
//	printf("%d, %d, %d\n",  NumberOfFreeClusters, BytesPerSector, SectorsPerCluster);
	DWORD64 FreeSpaceSize  = (DWORD64)NumberOfFreeClusters * (DWORD64)BytesPerSector * (DWORD64)SectorsPerCluster;
	if(FreeSpaceSize == 0)
	{
		return;
	}
//	printf("%I64d\n", FreeSpaceSize);
	DWORD GB = FreeSpaceSize / ((DWORD64)1024 * (DWORD64)1024 * (DWORD64)1024);
	FreeSpaceSize -= GB * ((DWORD64)1024 * (DWORD64)1024 * (DWORD64)1024);
	DWORD MB = FreeSpaceSize / ((DWORD64)1024 * (DWORD64)1024);
	FreeSpaceSize -= MB * ((DWORD64)1024 * (DWORD64)1024);
	DWORD KB = FreeSpaceSize / 1024;
	FreeSpaceSize -= KB * 1024;
	DWORD B = FreeSpaceSize;
	printf("%s 可用空间: %d GB  %d MB  %d KB  %d B\n", RootPathName, GB, MB, KB, B);
	

	DWORD64 TotalSpaceSize = (DWORD64)TotalNumberOfClusters * (DWORD64)BytesPerSector * (DWORD64)SectorsPerCluster;
//	printf("%I64d\n", TotalSpaceSize);
	GB = TotalSpaceSize / ((DWORD64)1024 * (DWORD64)1024 * (DWORD64)1024);
	TotalSpaceSize -= GB * ((DWORD64)1024 * (DWORD64)1024 * (DWORD64)1024);
	MB = TotalSpaceSize / ((DWORD64)1024 * (DWORD64)1024);
	TotalSpaceSize -= MB * ((DWORD64)1024 * (DWORD64)1024);
	KB = TotalSpaceSize / 1024;
	TotalSpaceSize -= KB * 1024;
	B = TotalSpaceSize;
	printf("%s 总空间:   %d GB  %d MB  %d KB  %d B\n", RootPathName, GB, MB, KB, B);
}

VOID PrintSpaceSize()
{
	
	CHAR DriverName[3] = "::";


	for(	
		DWORD dwDriver = GetLogicalDrives(), dw = 1;
		dwDriver != 0; 
		dwDriver /= 2, ++dw
		)
	{
		if(dwDriver % 2 == 1)
		{
			switch(dw)
			{
		/*	case 1:
				DriverName[0] = 'A';	//在WIN7正常,XP时,会使SpacdSize()中的GetDiskFreeSpace()出错,因为一般没插A盘
				SpaceSize(DriverName);  //“A:”会中断,XP下默认A盘是3.5英寸软盘,GetLastError()返回21为设备未就绪
				break;*/
			case 2:
				DriverName[0] = 'B';
				SpaceSize(DriverName);
				break;
			case 3:
				DriverName[0] = 'C';
				SpaceSize(DriverName);
				break;
			case 4:
				DriverName[0] = 'D';
				SpaceSize(DriverName);
				break;
			case 5:
				DriverName[0] = 'E';
				SpaceSize(DriverName);
				break;
			case 6:
				DriverName[0] = 'F';
				SpaceSize(DriverName);
				break;
			case 7:
				DriverName[0] = 'G';
				SpaceSize(DriverName);
				break;
			case 8:
				DriverName[0] = 'H';
				SpaceSize(DriverName);
				break;
			case 9:
				DriverName[0] = 'I';
				SpaceSize(DriverName);
				break;
			case 10:
				DriverName[0] = 'J';
				SpaceSize(DriverName);
				break;
			}
		
		}
	}	
}


VOID AllSystemInfo()
{
 	CHAR OS[24] = 	"Windows ";
	OS_Version(OS);
	printf("系统版本: %s\n",OS);	
	GetSystemDir();
	SystemInfo();
	PrintSpaceSize();
	GetTime();
}


DWORD DeleteDirFile(LPSTR szPath)
{
	CHAR szFilePath[MAX_PATH];

	WIN32_FIND_DATA FindFileData;
	HANDLE hListFile;
	CHAR szFullPath[MAX_PATH];

	//子目录和文件夹路径的字符串,用通配符“*”
	lstrcpy(szFilePath, szPath);
	lstrcat(szFilePath, "\\*");

	//第一个文件和目录,获得句柄
	hListFile = FindFirstFile(szFilePath,&FindFileData);

	if(hListFile==INVALID_HANDLE_VALUE)
	{
		//错误 处理
		switch(GetLastError())
		{
		case 3:
			printf("\n路径错误\n");
			break;
		case 5:
			printf("\n文件拒绝访问\n");
			break;
		case 21:
			printf("\n设备未就绪\n");
			break;
		case 111:
			printf("\n文件名太长\n");
			break;
		default:
			printf("\n错误编号:%d\n", GetLastError());
		}
		return 1;
	}
	else
	{		
		do
		{
			//“.”和“..”不遍历
			if(lstrcmp(FindFileData.cFileName,TEXT("."))==0||
				lstrcmp(FindFileData.cFileName,TEXT(".."))==0)
			{
				continue;
			}
			
			wsprintf(szFullPath,"%s\\%s",
				szPath,FindFileData.cFileName);

			printf("\n删除\t%s\t",szFullPath);

			//目录 就进去
			if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			{
				printf("---------------------目录");
				
				DeleteDirFile(szFullPath);
	//			RemoveDirectory(szFullPath);
			}	
			else
			{
				DeleteFile(szFullPath);
				dwDeleteFile++;
			}
		}
		while(FindNextFile(hListFile, &FindFileData));
	}
	return 0;
}




VOID TimeDifference(SYSTEMTIME StOld, SYSTEMTIME StNow)
{
	WORD wMinute;
	WORD wSecond;
	WORD wMilliseconds;
	

	if(StNow.wMilliseconds < StOld.wMilliseconds)
	{
		StNow.wSecond--;
		StNow.wMilliseconds += 1000;
		wMilliseconds = StNow.wMilliseconds - StOld.wMilliseconds;
	}
	else
	{
		wMilliseconds = StNow.wMilliseconds - StOld.wMilliseconds;
	}

	if(StNow.wSecond < StOld.wSecond)
	{
		StNow.wMinute--;
		StNow.wSecond += 60;
		wSecond = StNow.wSecond - StOld.wSecond;
	}
	else
	{
		wSecond = StNow.wSecond - StOld.wSecond;
	}

	if(StNow.wMinute < StOld.wMinute)
	{		
		StNow.wMinute += 60;
		wMinute = StNow.wMinute - StOld.wMinute;
	}
	else
	{
		wMinute = StNow.wMinute - StOld.wMinute;
	}

//	printf("\n花时 %d分 %d秒 %d微秒\n", wMinute, wSecond, wMilliseconds);
	printf("\n花时");
	if(wMinute != 0)
	{
		printf(" %d分", wMinute);
	}
	if(wSecond != 0)
	{
		printf(" %d秒", wSecond);
	}
	if(wMilliseconds != 0)
	{
		printf(" %d微秒\n", wMilliseconds);
	}
}

DWORD DeleteFileSuffix(LPSTR szPath, LPSTR Suffix)
{
	CHAR szFilePath[MAX_PATH];

	WIN32_FIND_DATA FindFileData;
	HANDLE hListFile;
	CHAR szFullPath[MAX_PATH];

	//子目录和文件夹路径的字符串,用通配符“*”
	lstrcpy(szFilePath, szPath);
	lstrcat(szFilePath, "\\*");

	//第一个文件和目录,获得句柄
	hListFile = FindFirstFile(szFilePath, &FindFileData);

	if(hListFile == INVALID_HANDLE_VALUE)
	{	
		//错误处理
		switch(GetLastError())
		{
		case 3:
			printf("\n路径错误\n");
			break;
		case 5:
			printf("\n文件拒绝访问\n");
			break;
		case 21:
			printf("\n设备未就绪\n");
			break;
		case 111:
			printf("\n文件名太长\n");
			break;
		default:
			printf("\n错误编号:%d\n", GetLastError());
		}
		return 1;
	}
	else
	{		
		do
		{
			//“.”和“..”不遍历
			if(lstrcmp(FindFileData.cFileName, TEXT(".")) == 0 || lstrcmp(FindFileData.cFileName, TEXT("..")) == 0)
			{
				continue;
			}
		
			wsprintf(szFullPath, "%s\\%s", szPath, FindFileData.cFileName);//路径

	

			//如果是目录,则进入
			if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			{
				DeleteFileSuffix(szFullPath, Suffix);
			}
			else
			{
				if(
					szFullPath[strlen(szFullPath) - 1] == Suffix[2] 
										&&
					szFullPath[strlen(szFullPath) - 2] == Suffix[1]
										&&
					szFullPath[strlen(szFullPath) - 3] == Suffix[0] 
				  )
				  {
					 ++dwDeleteFile;
					 printf("\n删除\t%s", szFullPath);
					 DeleteFile(szFullPath);
				  }
			}
		}
		while(FindNextFile(hListFile, &FindFileData));
	}
	return 0;
}
		

VOID DeleteRubbish()
{

	SYSTEMTIME StOld;
	SYSTEMTIME StNow;

	//垃圾文件后缀
	CHAR TmpSuffix[4] = "tmp";
	CHAR LogSuffix[4] = "log";
	CHAR GidSuffix[4] = "gid";
	CHAR ChkSuffix[4] = "chk";
	CHAR OldSuffix[4] = "old";
	CHAR BakSuffix[4] = "bak";

	//统计删除垃圾文件数
	DWORD dwPrefetch = 0;
	DWORD dwTmp = 0;
	DWORD dwLog = 0;
	DWORD dwGid = 0;
	DWORD dwChk = 0;
	DWORD dwOld = 0;
	DWORD dwBak = 0;

	//位置
	//CHAR DeletePrefetch[MAX_PATH] = "C:\\Windows\\prefetch";
	//								//"D:\\a\\a";
	//CHAR DeleteTemp[MAX_PATH] = "C:\\Windows\\Temp";
	//								//"D:\\a\\b";
	//CHAR DeleteTmp[MAX_PATH] = "C:";
	//						 //"D:\\a\\c";	
	//CHAR DeleteLog[MAX_PATH] = "C:";
	//				   		 //"D:\\a\\c";
	//CHAR DeleteGid[MAX_PATH] = "C:";
	//						//"D:\\a\\c";
	//CHAR DeleteChk[MAX_PATH] = "C:";
	//					     //"D:\\a\\c";
	//CHAR DeleteOld[MAX_PATH] = "C:";
	//						 //"D:\\a\\c";
	//CHAR DeleteBak[MAX_PATH] = "C:\\Windows";
	//						 //"D:\\a\\c";

	CHAR DeletePrefetch[MAX_PATH];
	GetWindowsDirectory(DeletePrefetch, MAX_PATH);
	strcat(DeletePrefetch, "\\Prefetch");

	CHAR DeleteTemp[MAX_PATH];
	GetWindowsDirectory(DeleteTemp, MAX_PATH);
	strcat(DeleteTemp, "\\Temp");

	CHAR DeleteTmp[MAX_PATH];
	GetWindowsDirectory(DeleteTmp, MAX_PATH);
	DeleteTmp[3] = '\0';

	CHAR DeleteLog[MAX_PATH];
	GetWindowsDirectory(DeleteLog, MAX_PATH);
	DeleteLog[3] = '\0';

	CHAR DeleteGid[MAX_PATH];
	GetWindowsDirectory(DeleteGid, MAX_PATH);
	DeleteGid[3] = '\0';

	CHAR DeleteChk[MAX_PATH];
	GetWindowsDirectory(DeleteChk, MAX_PATH);
	DeleteChk[3] = '\0';

	CHAR DeleteOld[MAX_PATH];
	GetWindowsDirectory(DeleteOld, MAX_PATH);
	DeleteOld[3] = '\0';

	CHAR DeleteBak[MAX_PATH];
	GetWindowsDirectory(DeleteBak, MAX_PATH);


	CHAR RootPathName[MAX_PATH];
	GetWindowsDirectory(RootPathName, MAX_PATH);
	RootPathName[2] = '\0';

	DWORD SectorsPerCluster;
	DWORD BytesPerSector;
	DWORD NumberOfFreeClusters;
	DWORD TotalNumberOfClusters;
	GetDiskFreeSpace(
		    RootPathName,
		    &SectorsPerCluster,
            &BytesPerSector,
		    &NumberOfFreeClusters,
            &TotalNumberOfClusters
		);

	DWORD64 OldFreeSpaceSize = (DWORD64)NumberOfFreeClusters * (DWORD64)BytesPerSector * (DWORD64)SectorsPerCluster;

	GetLocalTime(&StOld);


	printf("预读取文件\t删除中");
	DeleteDirFile(DeletePrefetch);
	dwPrefetch = dwDeleteFile;
	dwDeleteFile = 0;

	printf("\n临时文件\t删除中");
	DeleteFileSuffix(DeleteTmp, TmpSuffix);
	DeleteDirFile(DeleteTemp);
	dwTmp += dwDeleteFile;
	dwDeleteFile = 0;

	printf("\n日志文件\t删除中");
	DeleteFileSuffix(DeleteLog, LogSuffix);
	dwLog = dwDeleteFile;
	dwDeleteFile = 0;

	printf("\n索引文件\t删除中");
	DeleteFileSuffix(DeleteGid, GidSuffix);
	dwGid = dwDeleteFile;
	dwDeleteFile = 0;

	printf("\n文件碎片\t删除中");
	DeleteFileSuffix(DeleteChk, ChkSuffix);
	dwChk = dwDeleteFile;
	dwDeleteFile = 0;

	printf("\n过期文件\t删除中");
	DeleteFileSuffix(DeleteOld, OldSuffix);
	dwOld = dwDeleteFile;
	dwDeleteFile = 0;

	printf("\n备份文件\t删除中");
	DeleteFileSuffix(DeleteBak, BakSuffix);
	dwBak = dwDeleteFile;
	dwDeleteFile = 0;

	GetLocalTime(&StNow);

	GetDiskFreeSpace(
		RootPathName,
		&SectorsPerCluster,
        &BytesPerSector,
		&NumberOfFreeClusters,
        &TotalNumberOfClusters
	);

	DWORD64 NowFreeSpaceSize = (DWORD64)NumberOfFreeClusters * (DWORD64)BytesPerSector * (DWORD64)SectorsPerCluster;
	DWORD64 DeleteSpaceSize = NowFreeSpaceSize - OldFreeSpaceSize;

	DWORD GB = DeleteSpaceSize / ((DWORD64)1024 * (DWORD64)1024 * (DWORD64)1024);
	DeleteSpaceSize -= GB * ((DWORD64)1024 * (DWORD64)1024 * (DWORD64)1024);

	DWORD MB = DeleteSpaceSize / ((DWORD64)1024 * (DWORD64)1024);
	DeleteSpaceSize -= MB * ((DWORD64)1024 * (DWORD64)1024);

	DWORD KB = DeleteSpaceSize / 1024;
	DeleteSpaceSize -= KB * 1024;

	DWORD B = DeleteSpaceSize;

	printf("\n完毕\n");
	printf("删除 预读取文件\t%d\n", dwPrefetch);
	printf("删除 临时文件\t%d\n", dwTmp);
	printf("删除 日志文件\t%d\n", dwLog);
	printf("删除 索引文件\t%d\n", dwGid);
	printf("删除 文件碎片\t%d\n", dwChk);
	printf("删除 过期文件\t%d\n", dwOld);
	printf("删除 备份文件\t%d\n", dwBak);
//	printf("删除  %d GB  %d MB  %d KB  %d B 的垃圾文件", GB, MB, KB, B);

	if(GB == 0 && MB == 0 && KB == 0 && B == 0)
	{
		printf("您的系统非常干净\n");
		return;
	}

	printf("删除");
	if(GB != 0)
	{	
		if(GB < 0)
		{
			GB = -GB;
		}
		printf("  %d GB", GB);
	}
	if(MB != 0)
	{
		printf("  %d MB", MB);
	}
	if(KB != 0)
	{
		printf("  %d KB", KB);
	}
	if(B != 0)
	{
		printf("  %d B", B);
	}
	printf(" 的垃圾文件");
	TimeDifference(StOld, StNow);

}

DWORD FindDirFile(LPSTR szPath)
{
	CHAR szFilePath[MAX_PATH];

	WIN32_FIND_DATA FindFileData;
	HANDLE hListFile;
	CHAR szFullPath[MAX_PATH];

	//子目录和文件夹路径的字符串,用通配符“*”
	lstrcpy(szFilePath, szPath);
	lstrcat(szFilePath, "\\*");

	//第一个文件和目录,获得句柄
	hListFile = FindFirstFile(szFilePath, &FindFileData);

	if(hListFile == INVALID_HANDLE_VALUE)
	{
		//错误处理
		switch(GetLastError())
		{
		case 3:
			printf("\n路径错误\n");
			break;
		case 5:
			printf("\n文件拒绝访问\n");
			break;
		case 21:
			printf("\n设备未就绪\n");
			break;
		case 111:
			printf("\n文件名太长\n");
			break;
		default:
			printf("\n错误编号:%d\n", GetLastError());
		}
		return 1;
	}
	else
	{		
		do
		{
			//“.”和“..”不遍历
			if(lstrcmp(FindFileData.cFileName, TEXT(".")) == 0 || lstrcmp(FindFileData.cFileName, TEXT("..")) == 0)
			{
				continue;
			}
		
			wsprintf(szFullPath, "%s\\%s", szPath, FindFileData.cFileName);//路径

			Total++;
			dwFile++;
			

			printf("\n%d\t%s", Total, szFullPath);

			//如果是目录,则进入
			if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			{
				printf("--------------------------------目录");
				dwFolder++;
				dwFile--;
				FindDirFile(szFullPath);
			}			
		}
		while(FindNextFile(hListFile, &FindFileData));
	//	while(0);//找到回收站
	}
	return 0;
}

//转化格式在\后面在加个\,eg:“\”→“\\”
VOID Conversion(CHAR* c)
{
	for(int i = 0; i < strlen(c)+1; ++i)
	{

		if(c[i] == '\\')
		{		
			for(int j = strlen(c)+1; j >= i ; --j)
			{
				c[j+1] = c[j]; 
			}

			c[strlen(c)+1] = '\0';
			i += 2;
		}
	}
}

VOID StatisticsFile(VOID)
{	
		
		SYSTEMTIME StOld;
		SYSTEMTIME StNow;

		CHAR szCurrentPath[MAX_PATH];
		printf("输入盘符或文件夹路径(例如 D: 或者 D:\\360safe )\n路径:");
		scanf("%s", szCurrentPath);
		Conversion(szCurrentPath);

		GetLocalTime(&StOld);
		FindDirFile(szCurrentPath);
		GetLocalTime(&StNow);

	
		printf("\n文件总数%d:\t", dwFile);
		printf("文件夹总数%d:", dwFolder);
		TimeDifference(StOld, StNow);
}


//VOID GetUserNameDocuments(LPSTR c)
//{
//	CHAR Document[30] = "\\Documents\\Tencent Files";
//	CHAR UserName[50];
//	DWORD Size = MAX_PATH;
//	GetUserName(UserName, &Size);
	printf("%s\n", UserName);
//	strcat(c, UserName);  
//    strcat(c, Document);  
//}


VOID QQClean()
{
	SYSTEMTIME StOld;
	SYSTEMTIME StNow;
	
	printf("QQ垃圾");
		CHAR DeleteQQ[MAX_PATH];
	GetWindowsDirectory(DeleteQQ, MAX_PATH);
	DeleteQQ[3] = '\0';

	//printf("%s\n", DeleteQQ);
	
	OSVERSIONINFO OS;
	OS.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	GetVersionEx(&OS);

	switch(OS.dwMajorVersion)
	{
	//XP
	case 5:
		strcat(DeleteQQ, "Documents and Settings\\");
		break;

	//Win7
	case 6:
		strcat(DeleteQQ, "Users\\");
		break;
	}

	DWORD Size = MAX_PATH;
	CHAR  UserName[20];
	GetUserName(UserName, &Size);

	strcat(DeleteQQ, UserName);
	switch(OS.dwMajorVersion)
	{
	//XP
	case 5:
		strcat(DeleteQQ, "\\My Documents\\Tencent Files");
		break;

	//Win7
	case 6:
		strcat(DeleteQQ, "\\Documents\\Tencent Files");
		break;
	}

	GetLocalTime(&StOld);
	DeleteDirFile(DeleteQQ);
	GetLocalTime(&StNow);

//	printf("\n共删除 %d QQ文件\n\n", dwDeleteFile);
	printf("\n还原完毕\n");
	TimeDifference(StOld, StNow);

}

VOID Clear0(DWORD *Total, DWORD *dwFile, DWORD *dwFolder, DWORD *dwDeleteFile)
{
	*Total = 0;
	*dwFile = 0;
	*dwFolder = 0;		
	*dwDeleteFile = 0;
}

VOID DeleteTrace()
{
	SYSTEMTIME StOld;
	SYSTEMTIME StNow;
	
	CHAR DeleteCookies[MAX_PATH];
	CHAR DeleteHistory[MAX_PATH];
	CHAR UserName[MAX_PATH];

	DWORD Size = MAX_PATH;
	GetUserName(UserName, &Size);

	printf("清理痕迹\n");
	GetLocalTime(&StOld);

	GetWindowsDirectory(DeleteCookies, MAX_PATH);
	DeleteCookies[3] = '\0';
	
	GetWindowsDirectory(DeleteHistory, MAX_PATH);
	DeleteHistory[3] = '\0';

	OSVERSIONINFO OS;
	OS.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	GetVersionEx(&OS);

	switch(OS.dwMajorVersion)
	{
	//XP
	case 5:
		strcat(DeleteCookies, "Documents and Settings\\");
		strcat(DeleteHistory, "Documents and Settings\\");

		strcat(DeleteCookies, UserName);
		strcat(DeleteHistory, UserName);

		strcat(DeleteCookies, "\\Local Settings\\Temporary Internet Files");
		strcat(DeleteHistory, "\\Local Settings\\History\\History.IE5");

		DeleteDirFile(DeleteCookies);
		DeleteDirFile(DeleteHistory);
		break;

	//Win7
	case 6:
		strcat(DeleteCookies, "Users\\");

		strcat(DeleteCookies, UserName);

		strcat(DeleteCookies, "\\AppData\\Roaming\\Microsoft\\Windows\\Cookies");

		DeleteDirFile(DeleteCookies);
		break;
	}
	
	GetLocalTime(&StNow);

	TimeDifference(StOld, StNow);

}


int main()
{	
	while(1)
	{
		Show();
		int i;
		scanf("%d", &i);
		switch(i)
		{
		case 1:
			AllSystemInfo();
			Clear0(&Total, &dwFile, &dwFolder, &dwDeleteFile);
			break;

		case 2:
			DeleteRubbish();		
			Clear0(&Total, &dwFile, &dwFolder, &dwDeleteFile);
			break;

		case 3:
			QQClean();
			Clear0(&Total, &dwFile, &dwFolder, &dwDeleteFile);
			break;

		case 4:
			StatisticsFile();
			Clear0(&Total, &dwFile, &dwFolder, &dwDeleteFile);	 
			break;

		case 5:
			DeleteTrace();
			Clear0(&Total, &dwFile, &dwFolder, &dwDeleteFile);	
			break;

		default:
			return 0;
		}	
	}
}


转载于:https://www.cnblogs.com/coolulu/archive/2012/04/29/4084912.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值