压缩包里是带目录的多文件有层次结构。传入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) {
}
}
}