用SharpZipLib来压缩和解压文件 --zt
生活随笔
收集整理的這篇文章主要介紹了
用SharpZipLib来压缩和解压文件 --zt
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
from:http://www.cnblogs.com/zhangweiguo3984/archive/2007/03/15/314333.html#675634
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
????}
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
????}
轉載于:https://www.cnblogs.com/Nina-piaoye/archive/2007/03/15/675739.html
總結
以上是生活随笔為你收集整理的用SharpZipLib来压缩和解压文件 --zt的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: altera fpga 型号说明_ALT
- 下一篇: altera fpga 型号说明_Alt