前几天在需要实现一个上传一个Zip目录文件到服务器并且在服务器端解压成目录的功能.从网络上找了很多参考文件,获益良多。目前比较常见的使用方法有
(1)GzipStream,这是asp.net中自带的方法。对于解压包含单个文件的文件,使用很方便。
缺点:对于解压包含多个目录的压缩文件,需要编写不少代码。还不一定能做到能解压用户上传的使用通用软件压缩的软件包。
(2)使用ICSharpCode.SharpZipLib.dll; 下载地址 http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx
使用该方法也需要重新写不少代码,有点复杂。
优点:对于可以实现解压多种文件的功能,可遗址性强。
缺点:不一定能做到能解压用户上传的使用通用软件压缩的软件包。
(3)直接实用Shell API调用 7zip winzip一类解压软件。实现方便简单,代码结构性好,对压缩的兼容性可以依奈系统。
确定,需要在系统安装可以在shell运行的解压缩软件。最后我决定直接用shell来实现,并且使用开源的截压缩软件7zip.
下面的关键代码。
使用说明:
a.和该代码配合的网页上加一个FileUpload,button控件。Button2_Click为 Button控件的 Click事件响应。
b.在webconfig.cfg中加上下面的一段,以配置7zip在服务器端的安装情况。
<connectionStrings>
<add name="7zip" connectionString="C:/Program Files/7-Zip/7z.exe " providerName=" x "/>
</connectionStrings>
或者直接使用在代码中使用7zip的安装路径。
c.注意设置服务器端的几个目录第一个为放用户上传好的文件的目录PathOnServer,第二个就是解压程序7zip执行时的当前路径。
p.StartInfo.WorkingDirectory = strFolder;