小喵最近遇到一个状况,小喵需要使用者上传一个档案,上传后再由小喵的系统接手处理该档案,但是如果上传的档案太大,会造成两个影响:1.占用带宽。2.使用者上传时间过久。

为了解决这样的问题,于是小喵希望使用者上传前,透过OS内建的Zipped压缩机制将文件压缩成zip档,然后上传后再由小喵的系统接手解压缩,之后再来处理档案。

那么就会遇到一个状况:.NET Framework里面虽然有System.IO.Compression这个命名空间,但是他的格式是Gzip而非ZIP,因此一般透过工具或者使用OS内建的Zipped产生的档案无法透过这个命名空间提供的方式来解压缩。小喵再次从网络上搜寻,发现有人透过J#的命名空间System.Java.Zip来处理。但是很不幸的是从.NET Framework 2.0开始不再支持J#这个语言。因此这样的方式也不行。U_U

因此小喵开始寻找第三方的解决方案,找到了一个SharpZipLib这个免费的组件有提供可以压缩与解压缩zip格式。不过该组件的官方网站请参考【http://www.icsharpcode.net/OpenSource/SharpZipLib/】。该网站也提供范例档案、原始码提供使用者参考与研究。小喵试用之后发现,他里面有提供一个FastZip的类别,里面可以快速的直行两个动作,分别是:

  1. 压缩某文件夹(含子目录)成为一个zip
  2. 解压缩一个zip文件到指定的目录

但是如果想要【压缩某单一档案成为zip档】,在这个FastZip类别中并没有提供,如果要做到这个需求,必须在撰写一些额外的程序代码来达到。这对于使用上感觉不是很直观

于是小喵自己在撰写一个类别将SharpZip包装起来,只提供三个简单的Function,提供以下的功能:

  1. ZipDir(SourceDir,TargetFile):压缩文件夹
  2. ZipFile(SourceFile,TargetFile):压缩单一档案
  3. UnZipFile(SourceFile,TargetDir):解压缩到指定文件夹

这样小喵就能够用较为直观的方式来压缩、解压缩。相关的原始码如下:
http://vip2.blueshop.com.tw/topcat/sharefile/MySharpZip2005.zip

使用方式:
先将该专案的bin中的DeBug中的两个dllICSharpCode.SharpZipLib.dll,MySharpZip】加入参考。
然后就可以

Dim oZip As New MySharpZip.CZip 
Dim rc As String=oZip.UnZipFile("D:\Temp\abc.zip""D:\Temp"
If rc = "Success" Then 
    
Me.lblMsg.Text="解压缩成功!!" 
End If
posted on 2008-06-07 23:36  topcat  阅读(820)  评论(1编辑  收藏  举报