⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 压缩.c

📁 一个用ZIP算法实现的自解压程序制作
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <dir.h>
#include "zlib.h"
#include "name_def.h"

#define Quit(T) {\
				printf (T);\
				getch ();\
				return 0;\
				}

#define	skip(T) {\
				if (strncmp(ft.name, T, strlen(T)) == 0)\
					continue;\
				}

typedef unsigned int uint;

uint	i			= 0;
gzFile	gTarget;
FILE	*cRecord;
char	*buffer;
FILE	*fp;
void find_and_save(char *p){
	struct	_finddata_t ft;
	long	handle	= _findfirst(p, &ft);
	char*	pt;
	do{
		if (ft.name[0] == '.')
			continue;
		skip (_DAT);
		skip (_REC);
		skip (_TEM);
		skip (_COL);
		skip (_DLL);
		skip (_MAK);
		skip (_LEN);	
		pt = malloc (260);
		strcpy (pt, p);
		pt [strlen(pt)-1] = 0;
		strcat (pt, ft.name);
		printf ("%08x:%s", ft.attrib, ft.name);
		if((ft.attrib&0x10) == 0x10) //Directory
		{
			strcat (pt, "\\*");
			printf ("------->goto directory:\t%s\n", pt);
			find_and_save (pt);
			printf ("------->back to directory:\t%s\n", p);
		}
		else if((ft.attrib&0x20) == 0x20) //File
		{
			printf ("\tand\trecord file:%s\n", ft.name);
			fp = fopen (pt, "rb");
			fprintf (cRecord, "%d:%s\n", ft.size, pt);
			fflush (cRecord);
			while (!feof(fp)){
				i = fread (buffer, 1, 1024, fp);
				gzwrite (gTarget, buffer, i);
			}
			fclose (fp);
		}
		free (pt);
	}while(_findnext(handle, &ft) == 0);
}

int main(){	
	if ((gTarget = gzopen (_DAT, "wb")) == 0)
		Quit ("Open target compress file failed!");
	
	if ((cRecord = fopen (_REC, "wb")) == 0)
		Quit ("Open record file failed!");
	
	buffer = malloc (1024);
	find_and_save ("*");
	free (buffer);
	gzclose	(gTarget);
	
	fprintf (cRecord, _END);
	
	fclose	(cRecord);
	return 0; 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -