请下载 ICSharpCode.SharpZipLib.dll 文件引用到项目中 (参考下载地址http://download.csdn.net/download/jingdian14/4522175)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
namespace GlobalsTech.ZP.Common
{
public class ZIP
{
/// <summary>
/// 压缩文件
/// </summary>
/// <param name="FileToZip">要压缩的文件</param>
/// <param name="ZipedFile">压缩之后的路径</param>
/// <param name="Password">密码</param>
/// <returns></returns>
public static bool ZipFile(string FileToZip, string ZipedFile, String Password)
{
//如果文件没有找到,则报错
if (!File.Exists(FileToZip))
{
throw new System.IO.FileNotFoundException("指定要压缩的文件: " + FileToZip + " 不存在!");
}
FileStream ZipFile = null;
ZipOutputStream ZipStream = null;
ZipEntry ZipEntry = null;
bool res = true;
try
{
ZipFile = File.OpenRead(FileToZip);
byte[] buffer = new byte[ZipFile.Length];
ZipFile.Read(buffer, 0, buffer.Length);
ZipFile.Close();
ZipFile = File.Create(ZipedFile);
ZipStream = new ZipOutputStream(ZipFile);
// ZipStream.Password = Password;
ZipEntry = new ZipEntry(Path.GetFileName(FileToZip));
ZipStream.PutNextEntry(ZipEntry);
ZipStream.SetLevel(6);
ZipStream.Write(buffer, 0, buffer.Length);
}
catch
{
res = false;
}
finally
{
if (ZipEntry != null)
{
ZipEntry = null;
}
if (ZipStream != null)
{
ZipStream.Finish();
ZipStream.Close();
}
if (ZipFile != null)
{
ZipFile.Close();
ZipFile = null;
}
GC.Collect();
GC.Collect(1);
}
return res;
}
/// <summary>解压文件</summary>
/// <param name="file">压缩文件的名称,如:C:\123\123.zip</param>
/// <param name="dir">dir要解压的文件夹路径</param>
/// <returns></returns>
public static bool UnpackFiles(string file, string dir)
{
try
{
if (!File.Exists(file))
return false;
dir = dir.Replace("/", "\\");
if (!dir.EndsWith("\\"))
dir += "\\";
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);
ZipInputStream s = new ZipInputStream(File.OpenRead(file));
//s.Password
ZipEntry theEntry;
while ((theEntry = s.GetNextEntry()) != null)
{
string directoryName = Path.GetDirectoryName(theEntry.Name);
string fileName = Path.GetFileName(theEntry.Name);
if (directoryName != String.Empty)
Directory.CreateDirectory(dir + directoryName);
if (fileName != String.Empty)
{
FileStream streamWriter = File.Create(dir + theEntry.Name);
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();
return true;
}
catch (Exception)
{
return false;
}
}
}
}