日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

在C#中利用SharpZipLib进行文件的压缩和解压缩

發布時間:2024/8/5 C# 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在C#中利用SharpZipLib进行文件的压缩和解压缩 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我在做項目的時候需要將文件進行壓縮和解壓縮,于是就從http://www.icsharpcode.net下載了關于壓縮和解壓縮的源碼,但是下載下來后,面對這么多的代碼,一時不知如何下手。只好耐下心來,慢慢的研究,總算找到了門路。針對自己的需要改寫了文件壓縮和解壓縮的兩個類,分別為ZipClass和UnZipClass。其中碰到了不少困難,就決定寫出來壓縮和解壓的程序后,一定把源碼貼出來共享,讓首次接觸壓縮和解壓縮的朋友可以少走些彎路。下面就來解釋如何在C#里用http://www.icsharpcode.net下載的SharpZipLib進行文件的壓縮和解壓縮。

??? 首先需要在項目里引用SharpZipLib.dll。然后修改其中的關于壓縮和解壓縮的類。實現源碼如下:

?/// <summary>
?/// 壓縮文件
?/// </summary>

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();
? }
?}
}

現在再來看看解壓文件類的源碼

?/// <summary>
?/// 解壓文件
?/// </summary>

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();
? }
?}
}

??? 有了壓縮和解壓縮的類以后,就要在窗體里調用了。怎么?是新手,不會調用?Ok,接著往下看如何在窗體里調用。

??? 首先在窗體里放置兩個命令按鈕(不要告訴我你不會放啊~),然后編寫以下源碼

/// <summary>
?/// 調用源碼
?/// </summary>

????? 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);
? }

??? 好了,到此為止,如何壓縮和解壓縮的類都已經完成了,需要的朋友直接拿走調吧。

轉載于:https://www.cnblogs.com/Athrun/archive/2007/07/19/824477.html

總結

以上是生活随笔為你收集整理的在C#中利用SharpZipLib进行文件的压缩和解压缩的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。