LZO词典压缩器实现(含界面)
来源:互联网 发布:网络老虎机赌博论坛 编辑:程序博客网 时间:2024/05/16 12:05
1、界面效果:
(测试)压缩结果:
(测试)解压缩结果:
2、关键实现代码
(1)选择待压缩文件按钮
void CcompressDlg::OnBnClickedButton3(){// TODO: 在此添加控件通知处理程序代码CString strFile = _T("");CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T("Describe Files (*.cfg)|*.cfg|All Files (*.*)|*.*||"), NULL);if (dlgFile.DoModal()){strFile = dlgFile.GetPathName();}UpdateData(true); // 获取数据path = strFile;UpdateData(false); // 更新数据}
(2)选择解压缩文件按钮
void CcompressDlg::OnBnClickedButton4(){// TODO: 在此添加控件通知处理程序代码CString strFile = _T("");CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T("Describe Files (*.cfg)|*.cfg|All Files (*.*)|*.*||"), NULL);if (dlgFile.DoModal()){strFile = dlgFile.GetPathName();}UpdateData(true); // 获取数据path_decompress = strFile;UpdateData(false); // 更新数据}
(3)压缩按钮
void CcompressDlg::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码#ifdef _UNICODELONG len1;len1 = WideCharToMultiByte(CP_ACP, 0, path, -1, NULL, 0, NULL, NULL);char *textPath = (char *)malloc(sizeof(char)*(len1 + 1));memset(textPath, 0, len1 + 1);WideCharToMultiByte(CP_ACP, 0, path, -1, textPath, len1 + 1, NULL, NULL);#elseptr = new char[str.GetAllocLength() + 1];#endiferr = fopen_s(&ifp, textPath, "rb");if (err == 0){printf("Thefile'crt_fopen_s.c'wasopened\n");}fseek(ifp, 0, SEEK_END);unsigned long len = ftell(ifp);myInLen = len;fseek(ifp, 0, SEEK_SET);cpTemp = (char*)malloc(len * sizeof(char));fread(cpTemp, sizeof(char), len, ifp);char *in = cpTemp;char *out = (char*)malloc((len + len / 16 + 64 + 3) * sizeof(char));if (lzo_init() != LZO_E_OK){printf("internal error - lzo_init() failed !!!\n");printf("(this usually indicates a compiler bug - try recompiling\nwithout optimizations, and enable '-DLZO_DEBUG' for diagnostics)\n");}lzo_uint in_len;in_len = len;lzo_memset(in, 0, in_len);lzo_uint out_len;int r;r = lzo1x_1_compress((unsigned char*)in, in_len, (unsigned char*)out, &out_len, wrkmem);char mess[256];if (r == LZO_E_OK){sprintf_s(mess, sizeof(mess), "压缩成功!\n\n原文件大小:%lu bytes\n压缩后大小:%lu bytes\n\n解压得到的文件“compress.txt”保存于工程目录下",(unsigned long)in_len, (unsigned long)out_len);MessageBox(CString(mess));}else{/* this should NEVER happen */sprintf_s(mess, sizeof(mess), "压缩失败!\n %d\n", r);MessageBox(CString(mess));}/* check for an incompressible block */if (out_len >= in_len){sprintf_s(mess, sizeof(mess), "未压缩!\n");MessageBox(CString(mess));}err = fopen_s(&ofp, ".\\compress.txt", "wb");fwrite(out, sizeof(char), out_len, ofp);fclose(ifp);fclose(ofp);free(cpTemp);free(out);free(textPath);}
(4)解压缩按钮
void CcompressDlg::OnBnClickedButton2(){// TODO: 在此添加控件通知处理程序代码#ifdef _UNICODELONG len1;len1 = WideCharToMultiByte(CP_ACP, 0, path_decompress, -1, NULL, 0, NULL, NULL);char *textPath = (char *)malloc(sizeof(char)*(len1 + 1));memset(textPath, 0, len1 + 1);WideCharToMultiByte(CP_ACP, 0, path_decompress, -1, textPath, len1 + 1, NULL, NULL);#elseptr = new char[str.GetAllocLength() + 1];#endiferr = fopen_s(&ifp, textPath, "rb");if (err == 0){printf("Thefile'crt_fopen_s.c'was opened\n");}fseek(ifp, 0, SEEK_END);unsigned long len = ftell(ifp);fseek(ifp, 0, SEEK_SET);cpTemp = (char*)malloc(len * sizeof(char));fread(cpTemp, sizeof(char), len, ifp);char *in = cpTemp;char *out = (char *)malloc(len*100* sizeof(char));memset(out, 0, len * 100 * sizeof(char));int r;lzo_uint new_len;r = lzo1x_decompress((unsigned char*)in, len, (unsigned char*)out, &new_len, NULL);char mess[256];if (r == LZO_E_OK && new_len == myInLen){sprintf_s(mess, sizeof(mess), "解压成功!\n\n待解压文件大小: %lu bytes\n解压后文件大小: %lu bytes\n\n解压得到的文件“decompress.txt”保存于工程目录下",(unsigned long)len, (unsigned long)new_len);MessageBox(CString(mess));}else{/* this should NEVER happen */sprintf_s(mess, sizeof(mess), "解压失败! %d\n", r);MessageBox(CString(mess));}err = fopen_s(&ofp, ".\\decompress.txt", "wt+");fwrite(out, sizeof(char), new_len, ofp);fclose(ifp);fclose(ofp);free(cpTemp);free(textPath);free(out);}
(5)LZO压缩算法
代码下载:http://www.oberhumer.com/opensource/lzo/
0 1
- LZO词典压缩器实现(含界面)
- LZO词典压缩器实现(含界面)
- LZO词典压缩器实现(关键代码)
- LZO词典压缩器程序实现
- (信源三)词典压缩器的实现--LZO算法
- 作业4. LZO词典压缩器实现
- 【信源编码 作业三】基于LZO算法的词典压缩器实现
- 词典压缩器压缩与解压
- 一个LZW+huffman+RLC实现的压缩器
- 安卓词典界面
- 手势解锁功能逻辑的实现【不含手势解锁界面实现】(一)
- 手势解锁功能逻辑的实现【不含手势解锁界面实现】(二)
- (Android实战)ProgressBar+AsyncTask实现界面数据异步加载(含效果图)
- (Android实战)ProgressBar+AsyncTask实现界面数据异步加载(含效果图)
- (Android实战)ProgressBar+AsyncTask实现界面数据异步加载(含效果图)
- Java实现150条数据的K-means算法聚类分析(含界面)
- lzo
- LZO
- 51nod 1705七星剑 期望dp
- C++里string转换为int
- Heap Sort
- 数组名到底是什么类型的一个量?
- LeetCode069 Sqrt(x)
- LZO词典压缩器实现(含界面)
- ubuntu下python调用C/C++方法之动态链接库
- 51Nod-1262-扔球
- swustoj表达式转换(0309)
- 代码Review那些事
- Beat
- EF code first初始化创建数据库初探
- Mac OS X配置react-native遇到的坑
- 02-线性结构4 Pop Sequence (25分)