作者:Kation

版权所有,仿冒必究,哈~


Imports ICSharpCode.SharpZipLib.Zip Public Class QuickZIP Implements IDisposable Private _ZIP As ZipFile Private _Disposed As Boolean = False ''' <summary> ''' 打开ZIP文件 ''' </summary> ''' <param name="FileName">ZIP文件地址(没有的会自动创建)</param> ''' <remarks></remarks> Sub New(ByVal FileName As String) If IO.File.Exists(FileName) = True Then _ZIP = New ZipFile(FileName) Else _ZIP = ZipFile.Create(FileName) End If End Sub ''' <summary> ''' 实例化QuickZIP,从ZIPFile继承 ''' </summary> ''' <param name="ZIPFile">ZIPFile</param> ''' <remarks></remarks> Sub New(ByVal ZIPFile As ZipFile) _ZIP = ZIPFile End Sub ''' <summary> ''' 解压缩文件 ''' </summary> ''' <param name="Name">文件名(可以是包含文件夹的地址)</param> ''' <param name="Directory">解压到的目录</param> ''' <remarks></remarks> Sub Extract(ByVal Name As String, ByVal Directory As String) If _Disposed = False And _ZIP.GetEntry(Name).IsFile Then If IO.Directory.Exists(Directory) = False Then IO.Directory.CreateDirectory(Directory) End If Dim File As New IO.FileStream(Directory & "/" & Name, IO.FileMode.CreateNew) Dim B As Byte() = FileByte(Name) File.Write(B, 0, Len(B)) File.Close() File.Dispose() File = Nothing B = Nothing End If End Sub ''' <summary> ''' 设置ZIP文件的密码 ''' </summary> ''' <value></value> ''' <remarks></remarks> WriteOnly Property Password() As String Set(ByVal value As String) _ZIP.Password = value End Set End Property ''' <summary> ''' 获取或设置ZIP文件的注释 ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> Property Comment() As String Get If _Disposed = False Then Return _ZIP.ZipFileComment Else Return Nothing End If End Get Set(ByVal value As String) If _Disposed = False Then _ZIP.SetComment(value) End If End Set End Property ''' <summary> ''' 解压缩所有文件至文件夹 ''' </summary> ''' <param name="Directory">解压到的文件夹</param> ''' <remarks></remarks> Sub ExtractAll(ByVal Directory As String) If _Disposed = False Then If IO.Directory.Exists(Directory) = False Then IO.Directory.CreateDirectory(Directory) End If Dim F As New FastZip() F.ExtractZip(_ZIP.Name, Directory, "") F = Nothing End If End Sub ''' <summary> ''' ZIP文件内的文件数 ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> ReadOnly Property Count() As Integer Get If _Disposed = False Then Return _ZIP.Count End If End Get End Property ''' <summary> ''' 获取ZIPFile ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> ReadOnly Property ZIPFile() As ZipFile Get If _Disposed = False Then Return _ZIP Else Return Nothing End If End Get End Property ''' <summary> ''' 从ZIP文件内删除文件 ''' </summary> ''' <param name="Name">文件名</param> ''' <remarks></remarks> Sub Del(ByVal Name As String) If _Disposed = False Then _ZIP.BeginUpdate() _ZIP.Delete(_ZIP.GetEntry(Name)) _ZIP.CommitUpdate() End If End Sub ''' <summary> ''' 向ZIP文件添加文件或文件夹 ''' </summary> ''' <param name="FileName">文件地址</param> ''' <param name="Name">压缩包内使用的文件名(可以包括路径)</param> ''' <remarks></remarks> Sub Add(ByVal FileName As String, ByVal Name As String) If _Disposed = False Then If IO.File.Exists(FileName) Then _ZIP.BeginUpdate() _ZIP.Add(FileName, Name) _ZIP.CommitUpdate() End If End If End Sub ''' <summary> ''' 向ZIP文件添加文件夹 ''' </summary> ''' <param name="DirectoryName">文件夹地址</param> ''' <remarks></remarks> Sub Add(ByVal DirectoryName As String) If _Disposed = False Then If IO.Directory.Exists(DirectoryName) Then _ZIP.BeginUpdate() _ZIP.AddDirectory(DirectoryName) _ZIP.CommitUpdate() End If End If End Sub ''' <summary> ''' 获取一个地址是否是文件 ''' </summary> ''' <param name="Name">文件名</param> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> ReadOnly Property IsFile(ByVal Name As String) As Boolean Get If _Disposed = False And (Not _ZIP.GetEntry(Name) Is Nothing) Then Return _ZIP.GetEntry(Name).IsFile Else Return False End If End Get End Property ''' <summary> ''' 获取ZIP文件的MD5码 ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> ReadOnly Property MD5() As String Get If _Disposed = False Then Return MD5CalcFile(_ZIP.Name) Else Return Nothing End If End Get End Property ''' <summary> ''' 获取ZIP文件内的文件MD5码 ''' </summary> ''' <param name="Name">文件名</param> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> ReadOnly Property MD5(ByVal Name As String) As String Get If _Disposed = False And _ZIP.GetEntry(Name).IsFile Then Dim m As New System.Security.Cryptography.MD5CryptoServiceProvider Dim hash() As Byte = m.ComputeHash(FileByte(Name)) Return GetMd5.ByteArrayToString(hash) Else Return Nothing End If End Get End Property ''' <summary> ''' 直接获取ZIP文件内的文件Byte值 ''' </summary> ''' <param name="Name">文件名(可包含目录号“/”)</param> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> Default ReadOnly Property FileByte(ByVal Name As String) As Byte() Get If _Disposed = False Then If _ZIP.GetEntry(Name).IsFile Then Dim B(_ZIP.GetEntry(Name).Size) As Byte _ZIP.GetInputStream(_ZIP.GetEntry(Name)).Read(B, 0, _ZIP.GetEntry(Name).Size) Return B Else Return Nothing End If Else Return Nothing End If End Get End Property ''' <summary> ''' 直接设置ZIP文件内的文件Byte值 ''' </summary> ''' <param name="Name">文件名(可包含目录号“/”)</param> ''' <param name="Level">压缩等级(0~99)</param> ''' <value></value> ''' <remarks></remarks> Default WriteOnly Property FileByte(ByVal Name As String, ByVal Level As ICSharpCode.SharpZipLib.Zip.CompressionMethod) As Byte() Set(ByVal value As Byte()) If _Disposed = False Then _ZIP.BeginUpdate() _ZIP.Add(New ZipStream(New IO.MemoryStream(value)), Name, Level) _ZIP.CommitUpdate() End If End Set End Property ''' <summary> ''' 释放资源 ''' </summary> ''' <remarks></remarks> Sub Dispose() Implements System.IDisposable.Dispose _ZIP.Close() _ZIP = Nothing End Sub End Class Module GetMd5 Public Function MD5CalcFile(ByVal filepath As String) As String Using reader As New System.IO.FileStream(filepath, IO.FileMode.Open, IO.FileAccess.Read) Using md5 As New System.Security.Cryptography.MD5CryptoServiceProvider Dim hash() As Byte = md5.ComputeHash(reader) Return ByteArrayToString(hash) End Using End Using End Function Public Function ByteArrayToString(ByVal arrInput() As Byte) As String Dim sb As New System.Text.StringBuilder(arrInput.Length * 2) For i As Integer = 0 To arrInput.Length - 1 sb.Append(arrInput(i).ToString("X2")) Next Return sb.ToString().ToLower End Function End Module

此代码,写入过程去掉了一个核心

是我自己写的类,没有这个类,就无法直接从内存写入压缩包

大家可以自己研究,我是看了SharpZipLib的帮助文档后,自己动手创建了这个类的

不懂的可以在此向我询问~哈


QuickZIP V1.2 主题、下载地址:

http://topic.csdn.net/u/20100724/17/aa8c2fa1-debf-4662-859a-4ada5e93ccd9.html

QuickZIP V1.2 帮助文档:

http://blog.csdn.net/ZIP_xG/archive/2010/07/24/5761592.aspx

QuickZIP V1.21 源码 【学习SharpZipLib的必看!】【以SharpZipLib为基础完成】【VB.Net】相关推荐

  1. 为什么要看源码、如何看源码,高手进阶必看

    由于项目的需求,最近花了较多的时间来看开源项目的代码,在本文中,简单总结一下对为什么要看源码.如何看源码这两个问题的思考. 看源码的意义 看源码只是一种方法.手段,而不是目的.我也曾经给自己制定过&q ...

  2. JAVA要不要看源码_为什么要看源码、如何看源码,高手进阶必看

    作者:xybaby www.cnblogs.com/xybaby/p/10794700.html 由于项目的需求,最近花了较多的时间来看开源项目的代码,在本文中,简单总结一下对为什么要看源码.如何看源 ...

  3. 菜鸟学源码之Nacos v1.1.3源码学习-Client模块(1):NacosNamingService初始化

    摘要: 本文是Nacos源码学习的第一篇,基于Nacos v1.1.3版本对Nacos源码进行学习,本片主要从exmaple的App示例入手,切入Nacos客户端NacosNamingService的 ...

  4. jQuery1.3.2 源码学习 -1 $ 是什么?jQuery 又是什么?

    jQuery1.3.2  源码学习 本源码使用当前的 jQuery 1.3.2 版本,下载时间 2009-4-25,下载网站:jquery.com. 一个函数 1 /*! 2  * jQuery Ja ...

  5. Spring源码学习笔记:经典设计模式之代理模式

    1.博客内容均出自于咕泡学院架构师第三期 2.架构师系列内容:架构师学习笔记(持续更新) 0.代理模式(Proxy Pattern) 指为其他对象提供一种代理,以控制对这个对象的访问.代理对象在客户端 ...

  6. ERNIE源码学习与实践:为超越ChatGPT打下技术基础!

    ★★★ 本文源自AlStudio社区精品项目,[点击此处]查看更多精品内容 >>> ERNIE学习与实践:为超越ChatGPT打下技术基础! ERNIE是BERT相爱相杀的好基友,由 ...

  7. 文心ERNIE源码学习与实践:为超越ChatGPT打下技术基础!

    ERNIE学习与实践:为超越ChatGPT打下技术基础! ERNIE是BERT相爱相杀的好基友,由ERNIE发展起来的文心大模型,是GPT3.0的强劲竞争对手,未来还会挑战ChatGPT的江湖地位! ...

  8. (0045) iOS 开发之MBProgressHUD 源码学习

    (0045) iOS 开发之MBProgressHUD 源码学习 第一部分:学习所得和分析线程 1.  学习到了kvo 的使用 和屏幕方向的旋转判断. 2. 如果调起这个 HUD 的方法不是在主线程调 ...

  9. Java 源码学习系列(三)——Integer

    Integer 类在对象中包装了一个基本类型 int 的值.Integer 类型的对象包含一个 int 类型的字段. 此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还 ...

  10. 以太坊源码学习 -- EVM

    以太坊源码学习 – EVM 学习文档链接:here 一.虚拟机外 主要功能: 执行前将Transaction类型转化成Message,创建虚拟机(EVM)对象,计算一些Gas消耗,以及执行交易完毕后创 ...

最新文章

  1. diff算法阮一峰_【重学数据结构与算法(JS)】字符串匹配算法(三)——BM算法
  2. 前端开发框架_2019年应该如何学习前端开发?
  3. 不借助任何变量进行变量交换
  4. 详细说说ActionScript中function的call()方法和apply()方法
  5. 部分AllWin 平台Android4.4 车机 USB兼容性
  6. OpenAI对强化学习环境的汇总
  7. Silverlight Tools 安装失败 解决办法
  8. mysql 子查询 性能_mysql子查询性能
  9. 《程序员修炼之道 - 从小工到专家》吐血解读
  10. 【云计算学习教程】云计算的优势和劣势(优点和缺点)分析
  11. Python编程基础的应用
  12. 给皮肤贴个“创可贴”就能检测身体健康信号,如何?|技术前沿洞察
  13. 深入理解JVM的内存结构及GC机制
  14. Android适配全面屏,三星S8的18.9,小米mix全面屏
  15. 如何将安卓系统的手机屏幕同步显示在电脑上
  16. Smart iBat智能乒乓球拍
  17. C++动态分配内存空间
  18. Kubernetes kata-container 介绍
  19. 【Pandas入门教程】如何重塑表格布局
  20. 一些基础电路和物理量在线换算公式

热门文章

  1. Java自动生成word文档,用心看这篇就够了【重点】
  2. 软件测试中的43个功能测试点总结
  3. EndNote导出毕业论文格式的参考文献
  4. 社团管理系统软件测试,软件测试大作业-社团管理系统.doc
  5. 今天分享一下做支付宝小程序遇到的坑。ISV权限不足,建议在开发者中心检查对应功能是否已经添加。验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配
  6. 单片机c语言入门 龙脉工作室著,单片机c语言入门
  7. 可见光通信原理及硬件方案
  8. _beginthread 与 _endthread 函数分析 (ReactOS版)
  9. 精英网络技术论坛免杀基础
  10. latex中的对与错(对号与叉号)