📄 filecompress.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 + -