class UnZipClass
{
/// <summary>
/// 解压缩一个 zip 文件。
/// </summary>
/// <param name="zipedFile">待解压文件路径</param>
/// <param name="strDirectory">解压目录</param>
/// <param name="password">*.zip文件的密码</param>
/// <param name="overWrite">是否覆盖已存在的文件</param>
/// <param name="strOther">附加字段</param>
public void UnZip(string zipedFile, string strDirectory, string password, bool overWrite, string strOther)
{
if (strDirectory == "")
strDirectory = Directory.GetCurrentDirectory();
if (!strDirectory.EndsWith("\\"))
strDirectory = strDirectory + "\\";
//附加字段传值
string _STR = strOther;
using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipedFile)))
{
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);
//前者判断文件是否需要解压,后者可以只解压指定文件
if (pathToZip !=_STR && fileName != "_FILENAME" ) continue;
//生成解压目录
Directory.CreateDirectory(strDirectory + directoryName);
if (fileName != "")
{
if ((File.Exists(strDirectory + directoryName + fileName) && overWrite) || (!File.Exists(strDirectory + directoryName + fileName)))
{
using (FileStream streamWriter = File.Create(strDirectory + 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;
}
}
}
}
}
}
}
}
{
/// <summary>
/// 解压缩一个 zip 文件。
/// </summary>
/// <param name="zipedFile">待解压文件路径</param>
/// <param name="strDirectory">解压目录</param>
/// <param name="password">*.zip文件的密码</param>
/// <param name="overWrite">是否覆盖已存在的文件</param>
/// <param name="strOther">附加字段</param>
public void UnZip(string zipedFile, string strDirectory, string password, bool overWrite, string strOther)
{
if (strDirectory == "")
strDirectory = Directory.GetCurrentDirectory();
if (!strDirectory.EndsWith("\\"))
strDirectory = strDirectory + "\\";
//附加字段传值
string _STR = strOther;
using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipedFile)))
{
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);
//前者判断文件是否需要解压,后者可以只解压指定文件
if (pathToZip !=_STR && fileName != "_FILENAME" ) continue;
//生成解压目录
Directory.CreateDirectory(strDirectory + directoryName);
if (fileName != "")
{
if ((File.Exists(strDirectory + directoryName + fileName) && overWrite) || (!File.Exists(strDirectory + directoryName + fileName)))
{
using (FileStream streamWriter = File.Create(strDirectory + 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;
}
}
}
}
}
}
}
}