65.9K
CodeProject 正在变化。 阅读更多。
Home

SAWZip - zip 文件操作控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.56/5 (6投票s)

2001 年 1 月 3 日

viewsIcon

367333

downloadIcon

5445

一个基于 ATL 的控件,用于读写 zip 文件。

引言

在我开发 Java 类浏览器 (JCB) 时,我需要一个控件或源代码 (C++) 来读取 jar 文件。我搜索了网络,没有找到任何免费的优秀软件来解决这个问题。我找到了 Jean-loup Gailly 和 Mark Adler 的 zlib 压缩库。要理解它的工作原理并不容易。过了一会儿,我找到了 Tadeusz Dracz 编写的库。他在一个 MFC 库中使用了 zlib 压缩。这给了我一个关于如何使用 zlib 压缩库的好主意。他的库的问题在于它是用 MFC 编写的,而我想避免使用 MFC,因为我的 JCB 是一个 WTL 程序。因此,我开始开发一个基于 Tadeusz Dracz 源代码的 ATL 控件。

您可以使用 Visual C++ 和 Visual Basic 6.0 来使用此控件。该控件已在 Windows 98 和 Windows NT 上进行了测试。该应用程序的 UNICODE 版本尚未在 Windows NT 平台上进行测试。

Archive Object

属性

属性 类型 读/写 描述
名称 字符串 R zip 文件的名称。
文件 Files Object R 文件对象的集合。
注释 字符串 读/写 zip 文件的注释。
ReadOnly 布尔值 R 当您打开的 zip 文件是只读的时为 True。在您想要压缩文件之前,请测试此标志。

方法

名称 Returns 参数 描述
Close / / 关闭 zip 文件。
Create / ByVal aName as String 要创建的 zip 文件的名称
打开 / ByVal aName as String 要打开的 zip 文件的名称

Files Object

属性

属性 类型 读/写 描述
Count long R 存档中的文件数。

方法

名称 Returns 参数 描述
Add / ByVal newVal as File 将文件添加到存档。如果存档中已存在同名文件,则将被覆盖。
AddFileByName / ByVal aName as String,
ByVal level as Integer,
ByVal fullPath as Boolean,
ByVal refresh as Boolean
此方法可以使用通配符添加文件。有关 level 和 fullPath 的更多信息,请参见 File Object。当 refresh 设置为 true 时,将覆盖存档中同名的文件。当设置为 false 时,将跳过该文件。

以下示例执行以下操作:将当前目录中的所有 C++ 源文件添加到存档。覆盖存档中的当前文件。
zip.Files.AddFileByName "*.cpp", 1, true, true
项目 文件 ByVal index as Long 返回索引位置的文件。
移除 / ByVal index as Long 从存档中删除索引位置的文件。

File Object

属性

属性 类型 读/写 描述
名称 字符串 读/写 文件的名称。当 fullPath 设置为 false 时添加,路径将不会存储在存档中。
Directory(目录) 布尔值 R 当文件是目录时返回 True。
CompressedSize 长整型 R 文件压缩后的尺寸。
UncompressedSize 长整型 R 文件未压缩时的尺寸。
信号强度 整数 读/写 执行压缩的级别。值范围为 0-9。0 表示不压缩。1 提供最快的速度,9 提供最佳压缩。仅当文件尚未存储在存档中时才能设置此项。
Crc32 长整型 R 返回 crc 校验和值。
注释 字符串 读/写 返回或设置注释。仅当文件尚未存储在存档中时才能设置注释。
FullPath 布尔值 读/写 当存储到存档且 FullPath 为 false 时,将丢弃路径信息。当提取文件且 FullPath 为 false 时,将不带路径信息地提取文件。
目录 长整型 R 此文件对象在 Files 集合中的索引。当文件尚未存储在存档中时,此值为 -1。

方法

名称 Returns 参数 描述
提取 / ByVal aPath as String 将文件提取到指定路径。当 FullPath 设置为 false 时,文件将不带路径信息地存储。

备注

此控件使用 zlib 压缩库的 dll 版本。安装此控件时,zlib.dll 必须可访问。此控件大量使用私有接口在不同对象之间进行通信。您可以在我的 SAWEditListCtrl 页面上阅读有关如何实现这一点的信息。

资源

以下是我用于开发此控件的资源列表

Tadeusz Dracz 的 MFC 库。
zlib 压缩主页。

更新

2000 年 12 月 27 日    版本 1.0 发布。

2001 年 3 月 8 日    版本 1.1

  1. 为 fileobject 添加属性以检索文件日期
  2. 提取到字符串缓冲区

2001 年 4 月 18 日    版本 1.2

  1. 解决了 AddFileByName 中的一个 bug。

2001 年 5 月 23 日    版本 1.4

  • 添加了一个新属性用于测试只读 zip 文件。现在您可以从只读文件中提取文件。
  • 解决了提取文件后的内存泄漏问题。(感谢 Brad Gutilla)。

2001 年 6 月 28 日    版本 1.6

  • 版本 1.6:解决了 extract 方法中的 bug。当 fullpath 为 true 且目录不存在时,会发生“无法创建文件”错误。现在在提取之前会创建 fullpath。(感谢 Nat Dickinson)

2001 年 8 月 30 日 版本 2.0

  • 版本 2.0:解决了 archive 对象上的注释 bug。兼容 Win95 用户。(感谢 Frederic St-Laurent)
© . All rights reserved.