您的位置:首页 > 其它

用SharpZipLib来压缩和解压文件

2006-12-19 16:03 447 查看
1.建立工程,添加引用,添加SharpZipLib.dll
2.建立压缩和解压类CompressionFile.cs
添加如下代码


using System;


using System.IO;


using ICSharpCode.SharpZipLib.Zip;


using ICSharpCode.SharpZipLib.GZip;


using ICSharpCode.SharpZipLib.BZip2;


using ICSharpCode.SharpZipLib.Checksums;


using ICSharpCode.SharpZipLib.Zip.Compression;


using ICSharpCode.SharpZipLib.Zip.Compression.Streams;




namespace WebApplication3






{




ZipClass 压缩文件#region ZipClass 压缩文件


public class ZipClass






{


public void ZipFile(string FileToZip, string ZipedFile ,int CompressionLevel, int BlockSize,string password)






{


//如果文件没有找到,则报错


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]);




string[] filenames = new string[]

{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();


}


}


#endregion






UnZipClass 解压文件#region UnZipClass 解压文件


public class UnZipClass






{




/**//// <summary>


/// 解压文件


/// </summary>


/// <param name="args">包含要解压的文件名和要解压到的目录名数组</param>


public void UnZip(string[] args)






{


ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]));


try






{


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]+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();


}


catch(Exception eu)






{


throw eu;


}


finally






{


s.Close();


}




}//end UnZip






}//end UnZipClass


#endregion






AttachmentUnZip#region AttachmentUnZip


public class AttachmentUnZip






{


public AttachmentUnZip()






{


}


public static void UpZip(string zipFile)






{


string []FileProperties=new string[2];




FileProperties[0]=zipFile;//待解压的文件




FileProperties[1]=zipFile.Substring(0,zipFile.LastIndexOf("//")+1);//解压后放置的目标目录




UnZipClass UnZc=new UnZipClass();




UnZc.UnZip(FileProperties);


}




}


#endregion


}
3.建立测试页面
3.1html


<HTML>


<HEAD>


<title>WebForm1</title>


<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">


<meta name="CODE_LANGUAGE" Content="C#">


<meta name="vs_defaultClientScript" content="JavaScript">


<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">


</HEAD>


<body MS_POSITIONING="GridLayout">


<form id="Form1" method="post" runat="server">


<asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 56px; POSITION: absolute; TOP: 64px" runat="server"


Text="压缩"></asp:Button>


<asp:Button id="Button2" style="Z-INDEX: 102; LEFT: 112px; POSITION: absolute; TOP: 64px" runat="server"


Text="解压"></asp:Button><INPUT id="File1" style="Z-INDEX: 103; LEFT: 32px; POSITION: absolute; TOP: 24px" type="file"


name="File1" runat="server">


</form>


</body>


</HTML>
3.2 cs代码


public class WebForm1 : System.Web.UI.Page






{


protected System.Web.UI.WebControls.Button Button1;


protected System.Web.UI.HtmlControls.HtmlInputFile File1;


protected System.Web.UI.WebControls.Button Button2;




private void Page_Load(object sender, System.EventArgs e)






{


// Put user code to initialize the page here


}








Web Form Designer generated code#region Web Form Designer generated code


override protected void OnInit(EventArgs e)






{


//


// CODEGEN: This call is required by the ASP.NET Web Form Designer.


//


InitializeComponent();


base.OnInit(e);


}






/**//// <summary>


/// Required method for Designer support - do not modify


/// the contents of this method with the code editor.


/// </summary>


private void InitializeComponent()






{


this.Button1.Click += new System.EventHandler(this.Button1_Click);


this.Button2.Click += new System.EventHandler(this.Button2_Click);


this.Load += new System.EventHandler(this.Page_Load);




}


#endregion






压缩#region 压缩


private void Button1_Click(object sender, System.EventArgs e)






{


string []FileProperties=new string[2];


string fullName=this.File1.PostedFile.FileName;//C:/test/a.txt


string destPath=System.IO.Path.GetDirectoryName(fullName);//C:/test


//待压缩文件


FileProperties[0]=fullName;




//压缩后的目标文件


FileProperties[1]= destPath +"//"+ System.IO.Path.GetFileNameWithoutExtension(fullName)+".zip";


ZipClass Zc=new ZipClass();


Zc.ZipFileMain(FileProperties);




//删除压缩前的文件


System.IO.File.Delete(fullName);


}




#endregion






解压#region 解压


private void Button2_Click(object sender, System.EventArgs e)






{


string fullName=this.File1.PostedFile.FileName;//C:/test/a.zip


//解压文件


AttachmentUnZip.UpZip(fullName);


}


#endregion


}
4.源代码下载/Files/singlepine/zipunzip.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: