用SharpZipLib解压缩具有层次目录结构的ZIP文件

压缩包里是带目录的多文件有层次结构。传入ZIP文件名并解压缩到指定路径,有中文文件。

各位高手帮帮忙,只要解压缩的代码,问题解决就加分!!
---------------------------------------------------------------

using System;
using System.IO;

using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib;

namespace LiBo.SharpZipLib {
///

1<summary>   
2/// UnZip 类用于解压缩一个 zip 文件。   
3/// </summary>

public class UnZip {
///

1<summary>   
2/// 解压缩一个 zip 文件。   
3/// </summary>

///

1<param name="zipFileName"/>

要解压的 zip 文件。
///

1<param name="extractLocation"/>

zip 文件的解压目录。
///

1<param name="password"/>

zip 文件的密码。
///

1<param name="overWrite"/>

是否覆盖已存在的文件。
public UnZip(string zipFileName, string extractLocation, string password, bool overWrite) {
#region 实现
string myExtractLocation = extractLocation;
if (myExtractLocation == "")
myExtractLocation = Directory.GetCurrentDirectory();
if (!myExtractLocation.EndsWith("\"))
myExtractLocation = myExtractLocation + "\";
ZipInputStream s = new ZipInputStream(File.OpenRead(zipFileName));
s.Password = password;
ZipEntry theEntry;

while ((theEntry = s.GetNextEntry()) != null)
{
string directoryName = "";
string pathToZip = "";
pathToZip = theEntry.Name;

if (pathToZip != "")
directoryName = Path.GetDirectoryName(pathToZip) + "\";
string fileName = Path.GetFileName(pathToZip);
Directory.CreateDirectory(myExtractLocation + directoryName);
if (fileName != "")
{
if ( (File.Exists(myExtractLocation + directoryName + fileName) && overWrite) ¦ ¦
(!File.Exists(myExtractLocation + directoryName + fileName)) )
{
FileStream streamWriter = File.Create(myExtractLocation + directoryName + fileName);
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = s.Read(data, 0, data.Length);
if (size > 0)
streamWriter.Write(data, 0, size);
else
break;
}
streamWriter.Close();
}
}
}
s.Close();
#endregion
}

///

1<summary>   
2/// 解压缩一个 zip 文件。   
3/// </summary>

///

1<param name="zipFileName"/>

要解压的 zip 文件。
///

1<param name="extractLocation"/>

zip 文件的解压目录。
///

1<param name="password"/>

zip 文件的密码。
public UnZip(string zipFileName, string extractLocation, string password) :
this(zipFileName, extractLocation, password, true) {
}

///

1<summary>   
2/// 解压缩一个 zip 文件。   
3/// </summary>

///

1<param name="zipFileName"/>

要解压的 zip 文件。
///

1<param name="extractLocation"/>

zip 文件的解压目录。
///

1<param name="overWrite"/>

是否覆盖已存在的文件。
public UnZip(string zipFileName, string extractLocation, bool overWrite) :
this(zipFileName, extractLocation, "", overWrite) {
}

///

1<summary>   
2/// 解压缩一个 zip 文件。   
3/// </summary>

///

1<param name="zipFileName"/>

要解压的 zip 文件。
///

1<param name="extractLocation"/>

zip 文件的解压目录。
public UnZip(string zipFileName, string extractLocation) :
this(zipFileName, extractLocation, "", true) {
}
}
}

Published At
Categories with Web编程
Tagged with
comments powered by Disqus