?? main.cpp
字號:
#include <windows.h>
#include <stdio.h>
#include <memory.h>
#include <iostream.h>
#include "lz77.h"
//////////////////////////////////////////////////////////////////
// out file format:
// 0,flag2,buffer; 0,flag2,buffer; ...flag1,flag2,bufferlast;
// flag1 - 2 bytes, source buffer block length
// if block size is MAXSIZEBYTE, be zero
// flag2 - 2 bytes, compressed buffer length
// if can not compress, be same with 0
//////////////////////////////////////////////////////////////////
void CallCompress(char *inFile,char *outFile)
{
BYTE soubuf[MAXSIZEBYTE]="";
BYTE destbuf[MAXSIZEBYTE + 16]="";
FILE* in;
FILE* out;
in = fopen(inFile, "rb");
if (in == NULL)
{
puts("Can't open source file");
return;
}
out = fopen(outFile, "wb");
if (out == NULL)
{
puts("Can't open dest file");
fclose(in);
return;
}
fseek(in, 0, SEEK_END);
DWORD soulen = ftell(in);
fseek(in, 0, SEEK_SET);
UINT flag1=0, flag2=0;
DWORD last = soulen;
while ( last > 0 )
{
UINT act = min(MAXSIZEBYTE, last);
fread(soubuf, act, 1, in);
last -= act;
if (act == MAXSIZEBYTE)
flag1 = 0;
else
flag1 = act;
fwrite(&flag1, sizeof(UINT), 1, out);
CCompressLZ77 cc;
UINT destlen= cc.Compress((BYTE*)soubuf, act, (BYTE*)destbuf);
if (destlen == 0) // can't compress the block
{
flag2 = 0;
fwrite(&flag2, sizeof(UINT), 1, out);
fwrite(soubuf, act, 1, out);
}
else
{
flag2 = (UINT)destlen;
fwrite(&flag2, sizeof(UINT), 1, out);
fwrite(destbuf, destlen, 1, out);
}
}
fclose(in);
fclose(out);
}
void CallDeCompress(char *inFile,char *outFile)
{
BYTE soubuf[MAXSIZEBYTE]="";
BYTE destbuf[MAXSIZEBYTE + 16]="";
FILE* in;
FILE* out;
in = fopen(inFile, "rb");
if (in == NULL)
{
puts("Can't open source file");
return;
}
out = fopen(outFile, "wb");
if (out == NULL)
{
puts("Can't open dest file");
fclose(in);
return;
}
fseek(in, 0, SEEK_END);
DWORD soulen = ftell(in);
fseek(in, 0, SEEK_SET);
UINT flag1=0, flag2=0;
DWORD last = soulen;
UINT act;
while (last > 0)
{
fread(&flag1, sizeof(UINT), 1, in); // 原文件的長度
fread(&flag2, sizeof(UINT), 1, in); // 壓縮文件的長度
last -= 2 * sizeof(UINT);
if (flag1 == 0) // 原文件長度大于8192
act = MAXSIZEBYTE;
else
act = flag1;
last-= flag2 ? (flag2) : act;
if (flag2 == 0)
{
fread(soubuf, act, 1, in);
}
else
{
fread(destbuf, flag2, 1, in);
CCompressLZ77 cc;
if (!cc.Decompress((BYTE*)soubuf, act, (BYTE*)destbuf))
{
puts("Decompress error!");
fclose(in);
fclose(out);
return;
}
}
fwrite((BYTE*)soubuf, act, 1, out);
}
fclose(in);
fclose(out);
}
void main()
{
CallCompress("load.bin","m.txt");
CallDeCompress("m.txt","1.bin");
}
/*
void main(UINT argc,char *argv[])
{
if(argc!=4)
{
puts("Usage: ");
printf(" Compress : %s c sourcefile destfile\n", argv[0]);
printf(" Decompress : %s d sourcefile destfile\n", argv[0]);
return;
}
if (argv[1][0] == 'c'||argv[1][0]=='C') // compress
CallCompress(argv[2],argv[3]);
else if (argv[1][0] == 'd'||argv[1][0] == 'D') // decompress
CallDeCompress(argv[2],argv[3]) ;
else
{
puts("Usage: ");
printf(" Compress : %s c sourcefile destfile\n", argv[0]);
printf(" Decompress : %s d sourcefile destfile\n", argv[0]);
}
}
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -