垃圾文件清理助手

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

#define MAXNUM 50
#define MAXSTR 50
#define CFGFILE "type.txt"

void FindTrash(char sDir[]);
void CheckFile(char name[]);
void OnErr(int e);
long g_lClrNum=0;
long g_lClrSize=0;
char sType[MAXNUM][MAXSTR];

void main()
{
	char sPath[MAXSTR];
	int i=0;
	long lSizeMB,lSizeKB,lSizeB;
	//加载配置文件
	FILE *fp;
	if((fp=fopen(CFGFILE,"r"))==NULL)
	{
		printf("打开配置文件:\"%s\"失败!",CFGFILE);
		system("pause");
		exit(0);
	}
	while(fscanf(fp,"%s",sType[i++])!=EOF&&i<MAXNUM);
	fclose(fp);
	puts("路径(直接ENTER则默认为当前路径):");
	gets(sPath);
	if(sPath[0]=='\0') strcpy(sPath,".");
	FindTrash(sPath);
	
	lSizeMB=g_lClrSize/(1<<20);
	g_lClrSize%=(1<<20);
	lSizeKB=g_lClrSize/(1<<10);
	g_lClrSize%=(1<<10);
	lSizeB=g_lClrSize;
	puts("清理完毕!");
	printf("清理文件总数目:%ld\n",g_lClrNum);
	printf("清理文件总大小:%4ldMB%4ldKB%4ldB\n",lSizeMB,lSizeKB,lSizeB);

	system("pause");
}

void FindTrash(char sDir[])
{
	HANDLE hfile;
	short hcon;
	WIN32_FIND_DATA winfd;
	char sPath[MAXSTR];
	char sFileName[MAXSTR];

	sprintf(sPath,"%s\\*.*",sDir);
	hfile=FindFirstFile(sPath,&winfd);
	hcon=(short)hfile;
	while(hcon)
	{
		sprintf(sFileName,"%s\\%s",sDir,winfd.cFileName);
		if(GetFileAttributes(sFileName)&FILE_ATTRIBUTE_DIRECTORY)//是不是文件夹?
		{
			if(!(winfd.cFileName[0]=='.'&&//确保不是本文件夹和上文件夹
				(winfd.cFileName[1]=='\0'||winfd.cFileName[1]=='.'&&winfd.cFileName[2]=='\0')))
				FindTrash(sFileName);
		}
		else
			CheckFile(sFileName);
		hcon=FindNextFile(hfile,&winfd);
	}
	if(!FindClose(hfile)) 
	{
		puts("关闭文件失败!");
		system("pause");
		exit(0);
	}
}

void CheckFile(char name[])
{
	HANDLE hf;
	DWORD sizeLo;
	char pathBuffer[MAXSTR];
	int i;
	for(i=0;sType[i][0];i++)
	{
		if(strstr(name,sType[i])!=NULL)
		{
			hf=CreateFile(name,GENERIC_READ,FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
			sizeLo = GetFileSize(hf, NULL);
			GetFullPathName(name, MAXSTR,pathBuffer, NULL);
			CloseHandle(hf);

			if(DeleteFile(name))
			{
				printf("大小:%7dKB 文件名:\"%s\"\n",sizeLo/1024,name);
				g_lClrNum++;
				g_lClrSize+=sizeLo;
			}
			else
			{
				printf("清理文件:\"%s\"失败!\n",name);
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值