XUnzip 封装实现解压函数

XUnzip 封装实现解压函数

利用第三方 XUnzip 封装实现解压函数。


MyUnZip.h文件

1 /* 防止多次包含 */
2  
3 #ifndef MYUNZIP_H_
4 #define MYUNZIP_H_
5  
6 #include "XUnzip.h"
7 #include <afxwin.h>
8 #include <vector>
9  
10 #ifdef _UNICODE
11 #define MyUnZip MyUnZipW
12  
13 /* UNICODE版本 */
14 std::vector<CString> & MyUnZipW (CString szPathAndFileName, CString szUnZipPath = _T(""));
15  
16 #else
17 #define MyUnZip MyUnZipA
18  
19 /* ANSCII版本 */
20 std::vector<CString> & MyUnZipA (CString szPathAndFileName, CString szUnZipPath = "");
21  
22 #endif
23  
24 /******************************************************************
25 |--函数功能:
26 |--  解压zip压缩包到指定路径
27 |--
28 |--输入参数:
29 |--  szPathAndFileName: 待解压 zip压缩包所在文件夹路径和zip压缩名称; 如"D://00//1.zip"
30 |--  szUnZipPath: 解压出来的文件 所存放的问价完整路径; 如 “D://01
31 |--  此参数省略时,默认解压到exe程序所在文件夹下的 Skin文件
32 |--
33 |--返回值:
34 |--  解压出来所有文件的完整路径
35 ******************************************************************/
36  
37 #endif

MyUnZip.cpp文件

1 #include "stdafx.h"
2 #include "MyUnZip.h"
3  
4 std::vector<CString> & MyUnZipW (CString szPathAndFileName, CString szUnZipPath)
5 {
6     static std::vector<CString> szFilePath;
7 #ifdef _UNICODE
8     WCHAR buffer[248];
9  
10     if(szUnZipPath != L"")
11     {
12         /* 如果文件路径不存在 先创建,存在 不做任何修改 */
13         SHCreateDirectoryEx(NULL, szUnZipPath, NULL);
14     }
15     else
16     {
17         GetCurrentDirectory(248, (LPWSTR)&buffer);
18         szUnZipPath = buffer;
19         szUnZipPath += L"\\Skin";
20         SHCreateDirectoryEx(NULL, szUnZipPath, NULL);
21     }
22  
23     HZIP hz=OpenZip( (void*)(LPTSTR)(LPCTSTR)szPathAndFileName, 0, ZIP_FILENAME);
24     ZIPENTRYW ze;
25     GetZipItem(hz, -1, &ze);
26     int numitems=ze.index;
27  
28     for (int zi=0; zi<numitems; zi++)
29     {
30         ZIPENTRYW ze; GetZipItem(hz,zi,&ze);
31         UnzipItem(hz, zi, (void*)(LPTSTR)(LPCTSTR)(szUnZipPath+L"\\"+ze.name), 0,ZIP_FILENAME);        
32         szFilePath.push_back(szUnZipPath+L"\\"+ze.name);
33     }
34  
35     CloseZip(hz);
36 #endif
37     return szFilePath;
38 }
39  
40 std::vector<CString> & MyUnZipA (CString szPathAndFileName, CString szUnZipPath)
41 {
42  
43     static std::vector<CString> szFilePath;
44 #ifndef _UNICODE
45  
46     char buffer[248];
47     if(szUnZipPath != "")
48     {
49         /* 如果文件路径不存在 先创建,存在 不做任何修改 */
50         SHCreateDirectoryEx(NULL, szUnZipPath, NULL);
51     }
52     else
53     {
54         GetCurrentDirectory(248, (LPSTR)&buffer);
55         szUnZipPath = buffer;
56         szUnZipPath += "\\Skin";
57         SHCreateDirectoryEx(NULL, szUnZipPath, NULL);
58     }
59  
60     HZIP hz=OpenZip( (void*)(LPTSTR)(LPCTSTR)szPathAndFileName, 0, ZIP_FILENAME);
61     ZIPENTRY ze;
62     GetZipItem(hz, -1, &ze);
63     int numitems=ze.index;
64  
65     for (int zi=0; zi<numitems; zi++)
66     {
67         ZIPENTRY ze; GetZipItem(hz,zi,&ze);
68         UnzipItem(hz, zi, (void*)(LPTSTR)(LPCTSTR)(szUnZipPath+"\\"+ze.name), 0,ZIP_FILENAME);        
69         szFilePath.push_back(szUnZipPath+"\\"+ze.name);
70     }
71  
72     CloseZip(hz);
73 #endif
74     return szFilePath;
75 }

说明:经测试发现XUnzip 中对于路径的处理不是很好,所以根据需要,可以自行修改XUnzip.h、XUnzip.cpp文件来完善路径的处理。代码下载

0
OpenCV是一个流行的开源计算机视觉库,它为开发者提供了丰富的函数和类来处理图像和视频数据。要实现函数封装,即将一系列相关的操作封装为一个函数,我们可以按照以下步骤进行: 1. 定义函数的输入和输出:首先,我们需要确定我们希望函数接受的输入和输出参数类型。例如,我们可以定义一个函数,它接受一个图像作为输入,然后对图像进行某种处理,并返回处理后的图像。 2. 编写函数实现:在这一步中,我们开始实现函数的具体操作。我们可以使用OpenCV的函数和类进行图像处理,例如提取图像的特定通道、应用滤波器、检测边缘等。根据我们定义的输入和输出参数,我们可以在函数中添加相应的代码来实现这些操作。 3. 添加必要的错误检查和异常处理:在编写函数实现的同时,我们还应该考虑一些错误情况,例如输入图像为空、输入参数无效等。我们可以添加适当的错误检查和异常处理代码,以确保函数在遇到异常情况时能够正确地处理。 4. 进行函数调用和测试:完成函数实现后,我们可以在其他程序中调用这个函数,并传递合适的参数进行测试。我们可以使用不同的图像作为输入参数,然后检查函数是否按预期对图像进行处理并返回正确的结果。 通过这些步骤,我们可以将一系列相关的图像处理操作封装为一个函数,并且可以在多个项目中重复使用。这样做可以提高代码的可重用性和可维护性,并且使程序更加模块化和易于理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值