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

📄 filecompress.cpp

📁 自己编写的对文件做哈夫曼无损压缩编码/解码的程序;
💻 CPP
字号:
#include "stdafx.h"
#include <stdio.h>
#include "FileCompress.h"

int FILE_Compress(FUNC_Compress fun, const char* src, const char* des)
{
	int ret=COMPRESS_SUCCESS;
	FILE *fpsrc = fopen(src,"rb");
	FILE *fpdes = fopen(des,"wb");
	if( fpsrc!=NULL && fpdes!=NULL )
	{	
		BYTE* pBuf=new BYTE[MEM_LIMITLEN];
		if( pBuf==NULL )
		{
			if( fpsrc )fclose(fpsrc);
			if( fpdes )fclose(fpdes);
			return COMPRESS_MEMORY_ERROR;
		}
		
		BYTE *pDes;
		int  retLen,read;
		while( !feof(fpsrc) )
		{	
			read = fread(pBuf,1,MEM_LIMITLEN,fpsrc);			
			if( fun(pBuf,read,&pDes,&retLen) )
			{
				fwrite(&retLen,sizeof(int),1,fpdes);
				fwrite(pDes,1,retLen,fpdes);
				delete[] pDes;
			}		
		}

		delete[] pBuf;		
	}
	else ret=COMPRESS_OPENFILE_ERROR;

	if( fpsrc )fclose(fpsrc);
	if( fpdes )fclose(fpdes);

	return ret;
}

int FILE_Decompress(FUNC_Compress fun, const char* src, const char* des)
{
	int ret=COMPRESS_SUCCESS;
	FILE *fpsrc = fopen(src,"rb");
	FILE *fpdes = fopen(des,"wb");
	if( fpsrc!=NULL && fpdes!=NULL )
	{	
		fseek(fpsrc,0,SEEK_END);
		int fileLen = ftell(fpsrc);
		fseek(fpsrc,0,SEEK_SET);

		BYTE* pBuf=NULL;
		BYTE* pDes;
		int dataLen=0, memLen=MEM_LIMITLEN, read=0;
		while( read<fileLen )
		{
			read += sizeof(int);
			fread(&dataLen,sizeof(int),1,fpsrc);
			if( pBuf==NULL || memLen<dataLen)
			{
				if( pBuf!=NULL )delete[] pBuf;
				memLen=(dataLen>memLen?dataLen:memLen);
				
				pBuf = new BYTE[memLen];
				if( pBuf==NULL )
				{
					if( fpsrc )fclose(fpsrc);
					if( fpdes )fclose(fpdes);
					return COMPRESS_MEMORY_ERROR;
				}
			}
			read += fread(pBuf,1,dataLen,fpsrc);			
			if( fun(pBuf,dataLen,&pDes,&dataLen) )
			{
				fwrite(pDes,1,dataLen,fpdes);
				delete[] pDes;
			}
		}
		delete[] pBuf;		
	}
	else ret=COMPRESS_OPENFILE_ERROR;

	if( fpsrc )fclose(fpsrc);
	if( fpdes )fclose(fpdes);

	return ret;
}

⌨️ 快捷键说明

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