zoukankan      html  css  js  c++  java
  • 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;
    		}	
    	}
    }


  • 相关阅读:
    Windows JScript 在 游览器 中运行 调试 Shell 文件系统
    autohotkey 符号链接 软连接 symbolink
    软链接 硬链接 测试
    SolidWorks 修改 基准面 标准坐标系
    手机 路径 WebDAV 映射 驱动器
    Win10上手机路径
    explorer 命令行
    单位公司 网络 封锁 屏蔽 深信 AC
    cobbler自动化部署原理篇
    Docker四种网络模式
  • 原文地址:https://www.cnblogs.com/coolulu/p/4084912.html
Copyright © 2011-2022 走看看