93 lines
2.8 KiB
C#
93 lines
2.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.IO;
|
|
using ICSharpCode.SharpZipLib;
|
|
using ICSharpCode.SharpZipLib.Zip;
|
|
using ICSharpCode.SharpZipLib.Checksums;
|
|
namespace rycUpdate
|
|
{
|
|
/// <summary>
|
|
/// 解压类
|
|
/// </summary>
|
|
public class UnZipClass
|
|
{
|
|
/// <summary>
|
|
/// 解压功能(解压压缩文件到指定目录)
|
|
/// </summary>
|
|
/// <param name="FileToUpZip">待解压的文件</param>
|
|
/// <param name="ZipedFolder">指定解压目标目录</param>
|
|
public static void UnZip(string FileToUpZip, string ZipedFolder,string Password)
|
|
{
|
|
if (!File.Exists(FileToUpZip))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!Directory.Exists(ZipedFolder))
|
|
{
|
|
Directory.CreateDirectory(ZipedFolder);
|
|
}
|
|
|
|
ZipInputStream s = null;
|
|
ZipEntry theEntry = null;
|
|
|
|
string fileName;
|
|
FileStream streamWriter = null;
|
|
try
|
|
{
|
|
s = new ZipInputStream(File.OpenRead(FileToUpZip));
|
|
s.Password = Password;
|
|
while ((theEntry = s.GetNextEntry()) != null)
|
|
{
|
|
if (theEntry.Name != String.Empty)
|
|
{
|
|
fileName = Path.Combine(ZipedFolder, theEntry.Name);
|
|
///判断文件路径是否是文件夹
|
|
if (fileName.EndsWith("/") || fileName.EndsWith("\\"))
|
|
{
|
|
Directory.CreateDirectory(fileName);
|
|
continue;
|
|
}
|
|
|
|
streamWriter = File.Create(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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
if (streamWriter != null)
|
|
{
|
|
streamWriter.Close();
|
|
streamWriter = null;
|
|
}
|
|
if (theEntry != null)
|
|
{
|
|
theEntry = null;
|
|
}
|
|
if (s != null)
|
|
{
|
|
s.Close();
|
|
s = null;
|
|
}
|
|
GC.Collect();
|
|
GC.Collect(1);
|
|
}
|
|
}
|
|
}
|
|
}
|