XUnzip 封装实现解压函数

本文介绍使用XUnzip库封装的解压函数MyUnZip,该函数能够解压指定路径下的zip文件,并返回解压后的文件路径。支持Unicode和ANSI两种版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值