作者: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 ModuleImports ICSharp 你的当前访问异常,请进行认证后继续阅读剩余内容。 提交