-
Notifications
You must be signed in to change notification settings - Fork 10
/
MyMiniZip.h
126 lines (123 loc) · 2.9 KB
/
MyMiniZip.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#ifndef __MYMINIZIP__
#define __MYMINIZIP__
/*
@ ZLIB 实现简单的zip文件压缩|解压缩功能
@ 调用 ZLIB
@ http://www.zlib.net/
@ 2018年12月17日
*/
#include <windows.h>
#include <string>
#include <chrono>
extern "C"
{
#include "zlib.h"
#include "zconf.h"
#include "unzip.h"
#include "zip.h"
}
/*
@ 获取函数执行耗时多少秒
*/
typedef std::chrono::steady_clock::time_point Time;
class MyCTime
{
public:
MyCTime();
~MyCTime();
Time start() const;
Time end() const;
int CountInterval(Time& begin, Time& end);
private:
};
/*
@ 核心类 处理 压缩解压缩
*/
class MyMiniZip
{
public:
explicit MyMiniZip();
~MyMiniZip();
public:
/*
@ 获取unZipPackageToLoacal 函数解压共计用时
*/
int GetCountTime() const;
/*
@ 获取当前解压文件或者压缩文件的状态信息
*/
std::string GetFileStatus() const;
/*
@ 获取压缩包内全局注释文本
*/
std::string GetGlobalComment() const;
/*
@ 压缩文件 或者文件夹 内部自动判断
@ strSourceFile 要被压缩的文件或文件路径全称
@ strSaveFile 要生成的zip压缩包名全路径
@ 失败返回 false 成功返回 true
*/
bool CompressToPackageZip(const std::string strSourceFile, const std::string strSaveFile);
/*
@ 解压zip 包文件到指定路径
@ strSourceZipPath 要被解压的zip文件包全路径
@ strDestZipPath 将要解压到的本地路径
@ 成功返回 解压文件的数量 失败返回 null
*/
DWORD unZipPackageToLoacal(const std::string strSourceZipPath, const std::string strDestZipPath);
private:
/*
@ 将文件或者文件夹添加到zip压缩包中
@ ZipFile zipFile 句柄
@ strFileInZipName 文件或者文件夹名称
@ strPath 如果 strPath 为null表示 是文件夹 否则是文件
*/
bool addFileZip(zipFile ZipFile, const std::string strFileInZipName, const std::string strPath);
/*
@ 递归式遍历文件夹下所有文件并添加到zip压缩包
@ ZipFile zipFile 句柄
@ strFileInZipName 文件或者文件夹名称
@ strPath 如果 strPath 为null表示 是文件夹 否则是文件
*/
bool packFolderToZip(zipFile ZipFile, const std::string strFileInZipName, const std::string strPath);
/*
@ 压缩文件 或者文件夹 内部自动判断
@ strSourceFile 要被压缩的文件或文件路径全称
@ strSaveFile 要生成的zip压缩包名全路径
@ nMode 表示压缩文件还是文件夹 0 是文件 1 是文件夹
@ 失败返回 false 成功返回 true
*/
bool CompressToPackageZip(const std::string strSourceFile, const std::string strSaveFile,int nMode);
/*
@ 从指定路径读取二进制文件
@ szFileName 要读取的文件全路径
@ pFileBuffer 用来接收读取文件的内存buffer
@ 返回读取到文件的字节大小 失败返回null
*/
DWORD ReadFileBuffer(std::string szFileName, PVOID* pFileBuffer);
/*
@ 从内存中写文件数据到本地
@ szFileNmae 写出文件的全路径
@ pFileBuffer 写出文件的数据指针
@ dwFileSize 欲写出文件的大小长度
@ 失败返回 -1 成功 返回实际写出文件大小
*/
DWORD WriteFileBuffer(std::string szFileNmae, PVOID pFileBuffer, DWORD dwFileSize);
private:
Time TimeBegin;
Time TimeEnd;
int nCountTime;
/*
@ 当前操作解压文件状态
*/
std::string file_status;
/*
@ 压缩包内全局注释文本
*/
std::string global_comment;
/*
@ 解压ZIP包的 句柄
*/
unzFile unZipFileHandle;
};
#endif