///  
/// 压缩文件 
///  
using System; 
using System.IO; 
using ICSharpCode.SharpZipLib.Checksums; 
using ICSharpCode.SharpZipLib.Zip; 
using ICSharpCode.SharpZipLib.GZip; 
namespace Compression 
{ 
public class ZipClass 
{ 
public void ZipFile(string FileToZip, string ZipedFile ,int CompressionLevel, int BlockSize) 
{ 
//如果文件没有找到,则报错 
if (! System.IO.File.Exists(FileToZip)) 
{ 
throw new System.IO.FileNotFoundException("The specified file " + FileToZip + " could not be found. Zipping aborderd"); 
} 
system.io.filestream StreamToZip = new System.IO.FileStream(FileToZip,System.IO.FileMode.Open , System.IO.FileAccess.Read); 
System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile); 
ZipOutputStream ZipStream = new ZipOutputStream(ZipFile); 
ZipEntry ZipEntry = new ZipEntry("ZippedFile"); 
ZipStream.PutNextEntry(ZipEntry); 
ZipStream.SetLevel(CompressionLevel); 
byte[] buffer = new byte[BlockSize]; 
System.Int32 size =StreamToZip.Read(buffer,0,buffer.Length); 
ZipStream.Write(buffer,0,size); 
try 
{ 
while (size < StreamToZip.Length) 
{ 
int sizeRead =StreamToZip.Read(buffer,0,buffer.Length); 
ZipStream.Write(buffer,0,sizeRead); 
size += sizeRead; 
} 
} 
catch(System.Exception ex) 
{ 
throw ex; 
} 
ZipStream.Finish(); 
ZipStream.Close(); 
StreamToZip.Close(); 
} 
public void ZipFileMain(string[] args) 
{ 
string[] filenames = Directory.GetFiles(args[0]); 
crc32 crc = new Crc32(); 
ZipOutputStream s = new ZipOutputStream(File.Create(args[1])); 
s.setlevel(6); // 0 - store only to 9 - means best compression 
foreach (string file in filenames) 
{ 
//打开压缩文件 
FileStream fs = File.OpenRead(file); 
byte[] buffer = new byte[fs.Length]; 
fs.Read(buffer, 0, buffer.Length); 
ZipEntry entry = new ZipEntry(file); 
entry.datetime = DateTime.Now; 
// set Size and the crc, because the information 
// about the size and crc should be stored in the header 
// if it is not set it is automatically written in the footer. 
// (in this case size == crc == -1 in the header) 
// Some ZIP programs have problems with zip files that don't store 
// the size and crc in the header. 
entry.Size = fs.Length; 
fs.Close(); 
crc.reset(); 
crc.Update(buffer); 
entry.crc = crc.Value; 
s.putnextentry(entry); 
s.write(buffer, 0, buffer.Length); 
} 
s.finish(); 
s.Close(); 
} 
} 
} 
///  
/// 解压文件 
///  
using System; 
using System.Text; 
using System.Collections; 
using System.IO; 
using System.Diagnostics; 
using System.Runtime.Serialization.Formatters.Binary; 
using System.Data; 
using ICSharpCode.SharpZipLib.BZip2; 
using ICSharpCode.SharpZipLib.Zip; 
using ICSharpCode.SharpZipLib.Zip.Compression; 
using ICSharpCode.SharpZipLib.Zip.Compression.Streams; 
using ICSharpCode.SharpZipLib.GZip; 
namespace DeCompression 
{ 
public class UnZipClass 
{ 
public void UnZip(string[] args) 
{ 
ZipInputStream s = new ZipInputStream(File.OpenRead(args[0])); 
zipentry theEntry; 
while ((theEntry = s.GetNextEntry()) != null) 
{ 
string directoryName = Path.GetDirectoryName(args[1]); 
string fileName = Path.GetFileName(theEntry.Name); 
//生成解压目录 
Directory.CreateDirectory(directoryName); 
if (fileName != String.Empty) 
{ 
//解压文件到指定的目录 
FileStream streamWriter = File.Create(args[1]+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(); 
} 
} 
} 
///  
/// 调用源码 
///  
private void button2_Click_1(object sender, System.EventArgs e) 
{ 
string []FileProperties=new string[2]; 
FileProperties[0]="C:\\unzipped\\";//待压缩文件目录 
FileProperties[1]="C:\\zip\\a.zip"; //压缩后的目标文件 
ZipClass Zc=new ZipClass(); 
Zc.ZipFileMain(FileProperties); 
} 
private void button2_Click(object sender, System.EventArgs e) 
{ 
string []FileProperties=new string[2]; 
FileProperties[0]="C:\\zip\\test.zip";//待解压的文件 
FileProperties[1]="C:\\unzipped\\";//解压后放置的目标目录 
UnZipClass UnZc=new UnZipClass(); 
UnZc.UnZip(FileProperties); 
}