亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C# 使用SharpZipLib生成壓縮包的實例代碼

2019-10-29 19:58:42
字體:
來源:轉載
供稿:網友

本文通過一個簡單的小例子簡述SharpZipLib壓縮文件的常規用法,僅供學習分享使用,如有不足之處,還請指正。

什么是SharpZipLib ?

SharpZipLib是一個C#的類庫,主要用來解壓縮Zip,GZip,BZip2,Tar等格式,是以托管程序集的方式實現,可以方便的應用于其他的項目之中。

在工程中引用SharpZipLib

在項目中,點擊項目名稱右鍵-->管理NuGet程序包,打開NuGet包管理器窗口,進行搜索下載即可,如下圖所示:

C#,SharpZipLib,壓縮包,代碼

SharpZipLib的關鍵類結構圖

如下所示:

C#,SharpZipLib,壓縮包,代碼

涉及知識點:

•ZipOutputStream 壓縮輸出流,將文件一個接一個的寫入壓縮文檔,此類不是線程安全的。
•PutNextEntry 開始一個新的ZIP條目,ZipOutputStream中的方法。
•ZipEntry 一個ZIP文件中的條目,可以理解為壓縮包里面的一個文件夾/文件。
•ZipInputStream 解壓縮輸出流,從壓縮包中一個接一個的讀出文檔。
•GetNextEntry 讀出ZIP條目,ZipInputStream中的方法。

示例效果圖:

關于解壓縮小例子的示例效果圖,如下:

C#,SharpZipLib,壓縮包,代碼

核心代碼

using ICSharpCode.SharpZipLib.Checksum;using ICSharpCode.SharpZipLib.Zip;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DemoZip{  class ZipHelper  {    private string rootPath = string.Empty;    #region 壓縮     /// <summary>      /// 遞歸壓縮文件夾的內部方法      /// </summary>      /// <param name="folderToZip">要壓縮的文件夾路徑</param>      /// <param name="zipStream">壓縮輸出流</param>      /// <param name="parentFolderName">此文件夾的上級文件夾</param>      /// <returns></returns>      private bool ZipDirectory(string folderToZip, ZipOutputStream zipStream, string parentFolderName)    {      bool result = true;      string[] folders, files;      ZipEntry ent = null;      FileStream fs = null;      Crc32 crc = new Crc32();      try      {        string entName = folderToZip.Replace(this.rootPath, string.Empty)+"/";        //Path.Combine(parentFolderName, Path.GetFileName(folderToZip) + "/")        ent = new ZipEntry(entName);        zipStream.PutNextEntry(ent);        zipStream.Flush();        files = Directory.GetFiles(folderToZip);        foreach (string file in files)        {          fs = File.OpenRead(file);          byte[] buffer = new byte[fs.Length];          fs.Read(buffer, 0, buffer.Length);          ent = new ZipEntry(entName + Path.GetFileName(file));          ent.DateTime = DateTime.Now;          ent.Size = fs.Length;          fs.Close();          crc.Reset();          crc.Update(buffer);          ent.Crc = crc.Value;          zipStream.PutNextEntry(ent);          zipStream.Write(buffer, 0, buffer.Length);        }      }      catch      {        result = false;      }      finally      {        if (fs != null)        {          fs.Close();          fs.Dispose();        }        if (ent != null)        {          ent = null;        }        GC.Collect();        GC.Collect(1);      }      folders = Directory.GetDirectories(folderToZip);      foreach (string folder in folders)        if (!ZipDirectory(folder, zipStream, folderToZip))          return false;      return result;    }    /// <summary>      /// 壓縮文件夾      /// </summary>      /// <param name="folderToZip">要壓縮的文件夾路徑</param>      /// <param name="zipedFile">壓縮文件完整路徑</param>      /// <param name="password">密碼</param>      /// <returns>是否壓縮成功</returns>      public bool ZipDirectory(string folderToZip, string zipedFile, string password)    {      bool result = false;      if (!Directory.Exists(folderToZip))        return result;      ZipOutputStream zipStream = new ZipOutputStream(File.Create(zipedFile));      zipStream.SetLevel(6);      if (!string.IsNullOrEmpty(password)) zipStream.Password = password;      result = ZipDirectory(folderToZip, zipStream, "");      zipStream.Finish();      zipStream.Close();      return result;    }    /// <summary>      /// 壓縮文件夾      /// </summary>      /// <param name="folderToZip">要壓縮的文件夾路徑</param>      /// <param name="zipedFile">壓縮文件完整路徑</param>      /// <returns>是否壓縮成功</returns>      public bool ZipDirectory(string folderToZip, string zipedFile)    {      bool result = ZipDirectory(folderToZip, zipedFile, null);      return result;    }    /// <summary>      /// 壓縮文件      /// </summary>      /// <param name="fileToZip">要壓縮的文件全名</param>      /// <param name="zipedFile">壓縮后的文件名</param>      /// <param name="password">密碼</param>      /// <returns>壓縮結果</returns>      public bool ZipFile(string fileToZip, string zipedFile, string password)    {      bool result = true;      ZipOutputStream zipStream = null;      FileStream fs = null;      ZipEntry ent = null;      if (!File.Exists(fileToZip))        return false;      try      {        fs = File.OpenRead(fileToZip);        byte[] buffer = new byte[fs.Length];        fs.Read(buffer, 0, buffer.Length);        fs.Close();        fs = File.Create(zipedFile);        zipStream = new ZipOutputStream(fs);        if (!string.IsNullOrEmpty(password)) zipStream.Password = password;        ent = new ZipEntry(Path.GetFileName(fileToZip));        zipStream.PutNextEntry(ent);        zipStream.SetLevel(6);        zipStream.Write(buffer, 0, buffer.Length);      }      catch      {        result = false;      }      finally      {        if (zipStream != null)        {          zipStream.Finish();          zipStream.Close();        }        if (ent != null)        {          ent = null;        }        if (fs != null)        {          fs.Close();          fs.Dispose();        }      }      GC.Collect();      GC.Collect(1);      return result;    }    /// <summary>      /// 壓縮文件      /// </summary>      /// <param name="fileToZip">要壓縮的文件全名</param>      /// <param name="zipedFile">壓縮后的文件名</param>      /// <returns>壓縮結果</returns>      public bool ZipFile(string fileToZip, string zipedFile)    {      bool result = ZipFile(fileToZip, zipedFile, null);      return result;    }    /// <summary>      /// 壓縮文件或文件夾      /// </summary>      /// <param name="fileToZip">要壓縮的路徑</param>      /// <param name="zipedFile">壓縮后的文件名</param>      /// <param name="password">密碼</param>      /// <returns>壓縮結果</returns>      public bool Zip(string fileToZip, string zipedFile, string password)    {      bool result = false;      if (Directory.Exists(fileToZip))      {        this.rootPath = Path.GetDirectoryName(fileToZip);        result = ZipDirectory(fileToZip, zipedFile, password);      }      else if (File.Exists(fileToZip))      {        this.rootPath = Path.GetDirectoryName(fileToZip);        result = ZipFile(fileToZip, zipedFile, password);      }      return result;    }    /// <summary>      /// 壓縮文件或文件夾      /// </summary>      /// <param name="fileToZip">要壓縮的路徑</param>      /// <param name="zipedFile">壓縮后的文件名</param>      /// <returns>壓縮結果</returns>      public bool Zip(string fileToZip, string zipedFile)    {      bool result = Zip(fileToZip, zipedFile, null);      return result;    }    #endregion    #region 解壓     /// <summary>      /// 解壓功能(解壓壓縮文件到指定目錄)      /// </summary>      /// <param name="fileToUnZip">待解壓的文件</param>      /// <param name="zipedFolder">指定解壓目標目錄</param>      /// <param name="password">密碼</param>      /// <returns>解壓結果</returns>      public bool UnZip(string fileToUnZip, string zipedFolder, string password)    {      bool result = true;      FileStream fs = null;      ZipInputStream zipStream = null;      ZipEntry ent = null;      string fileName;      if (!File.Exists(fileToUnZip))        return false;      if (!Directory.Exists(zipedFolder))        Directory.CreateDirectory(zipedFolder);      try      {        zipStream = new ZipInputStream(File.OpenRead(fileToUnZip));        if (!string.IsNullOrEmpty(password)) zipStream.Password = password;        while ((ent = zipStream.GetNextEntry()) != null)        {          if (!string.IsNullOrEmpty(ent.Name))          {            fileName = Path.Combine(zipedFolder, ent.Name);            fileName = fileName.Replace('/', '//');//change by Mr.HopeGi              if (fileName.EndsWith("//"))            {              Directory.CreateDirectory(fileName);              continue;            }            fs = File.Create(fileName);            int size = 2048;            byte[] data = new byte[size];            while (true)            {              size = zipStream.Read(data, 0, data.Length);              if (size > 0)                fs.Write(data, 0, data.Length);              else                break;            }          }        }      }      catch      {        result = false;      }      finally      {        if (fs != null)        {          fs.Close();          fs.Dispose();        }        if (zipStream != null)        {          zipStream.Close();          zipStream.Dispose();        }        if (ent != null)        {          ent = null;        }        GC.Collect();        GC.Collect(1);      }      return result;    }    /// <summary>      /// 解壓功能(解壓壓縮文件到指定目錄)      /// </summary>      /// <param name="fileToUnZip">待解壓的文件</param>      /// <param name="zipedFolder">指定解壓目標目錄</param>      /// <returns>解壓結果</returns>      public bool UnZip(string fileToUnZip, string zipedFolder)    {      bool result = UnZip(fileToUnZip, zipedFolder, null);      return result;    }    #endregion  }}

備注

關于生成壓縮的方法還有很多,如通過命令行調用winrar的執行文件,SharpZipLib只是方法之一。

關于SharpZipLib的的API文檔,可參看鏈接。

總結

以上所述是小編給大家介紹的C# 使用SharpZipLib生成壓縮包的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久人人爽人人爽爽久久| 亚洲黄色av女优在线观看| 91精品国产九九九久久久亚洲| 亚洲一级免费视频| 久久久www成人免费精品张筱雨| 97久久精品人人澡人人爽缅北| 亚洲成人免费在线视频| 国内外成人免费激情在线视频网站| 九色91av视频| 97视频在线观看成人| 欧美激情一区二区三区久久久| 欧美激情免费看| 日韩亚洲欧美成人| 国产美女扒开尿口久久久| 日本电影亚洲天堂| 国产精品视频网| 欧美国产亚洲精品久久久8v| 久久成年人视频| 免费91在线视频| 国产a∨精品一区二区三区不卡| 久久精品一区中文字幕| 国产亚洲一级高清| 6080yy精品一区二区三区| 97香蕉久久超级碰碰高清版| 欧美视频在线观看 亚洲欧| 欧美国产精品va在线观看| 欧美色图在线视频| 亚洲欧美日本精品| 中文字幕亚洲欧美日韩2019| 精品激情国产视频| 91精品国产免费久久久久久| 久久福利视频网| 欧美另类69精品久久久久9999| 国产精品爱啪在线线免费观看| 欧美午夜精品久久久久久人妖| 国产精品亚洲综合天堂夜夜| 日韩av综合网站| 伊人久久男人天堂| 精品高清美女精品国产区| 91美女片黄在线观| 91精品国产自产在线| 国产91色在线| 日韩精品一二三四区| 亚洲色图13p| 91精品久久久久久久久久入口| 亚洲欧美日韩爽爽影院| 国产精品成人免费视频| 欧美激情中文网| 精品国产老师黑色丝袜高跟鞋| 久久精品99久久久久久久久| 日本久久精品视频| 亚洲区免费影片| 欧美俄罗斯乱妇| 97在线观看视频| 国产精品视频自拍| 亚洲韩国欧洲国产日产av| 大荫蒂欧美视频另类xxxx| 91最新在线免费观看| 日韩亚洲精品视频| 国产成人精品视| 国产一区二区三区四区福利| 中文字幕av日韩| 欧美国产激情18| 久久99久久久久久久噜噜| 91性高湖久久久久久久久_久久99| 国产综合久久久久| 欧美激情一级欧美精品| 国产偷国产偷亚洲清高网站| 欧美激情视频在线观看| 亚洲免费一级电影| 久久久久久久久久久成人| 亚洲精品久久久久久久久| 久久久噜噜噜久久中文字免| 91精品国产色综合久久不卡98口| 不卡av电影在线观看| 国产成人一区二区三区电影| 欧美成人免费全部| 久久九九全国免费精品观看| 日韩欧美在线第一页| 92裸体在线视频网站| 91精品国产高清久久久久久91| 中文字幕亚洲欧美日韩高清| 亚洲精品视频免费在线观看| 日韩精品极品毛片系列视频| 91视频免费在线| 成人h猎奇视频网站| 国产精品久久久久久亚洲影视| 欧美日韩国内自拍| 亚洲精品国产综合久久| 欧美在线亚洲在线| 亚洲精品久久久久久下一站| 亚洲欧美变态国产另类| 97久久精品人搡人人玩| 日日骚久久av| 亚洲欧美一区二区三区久久| 亚洲日韩第一页| 国产欧美在线看| xxxxx成人.com| www.美女亚洲精品| 亚洲人高潮女人毛茸茸| 国产精品电影观看| 亚洲自拍偷拍第一页| 国产欧美一区二区三区久久人妖| 成人免费淫片aa视频免费| 精品久久久久久国产| xvideos成人免费中文版| 欧美激情免费在线| 亚洲丝袜av一区| 国产日韩欧美在线| 国产精品激情av电影在线观看| 中文字幕一精品亚洲无线一区| 亚洲精品午夜精品| 国产精品久久久久久久久久小说| 18一19gay欧美视频网站| 欧美黑人一级爽快片淫片高清| 日韩少妇与小伙激情| 国产精自产拍久久久久久蜜| 日韩在线观看高清| 精品久久久久久久久国产字幕| 欧美国产高跟鞋裸体秀xxxhd| 国产亚洲激情在线| 欧美性猛交xxxx免费看久久久| 国产日产欧美精品| www.欧美三级电影.com| 欧美黄色小视频| 欧美中文字幕视频| 亚洲视频日韩精品| 亚洲老板91色精品久久| 亚洲天堂色网站| 91大神福利视频在线| 欧美巨大黑人极品精男| 久久久精品网站| 国产精品一区二区三区免费视频| 亚洲视频电影图片偷拍一区| 亚洲欧美日韩中文在线| 这里只有精品视频在线| 中文字幕亚洲综合久久| 国产97色在线| 成人黄色片在线| 欧美老女人在线视频| 国产剧情久久久久久| 黄色一区二区三区| 欧美极度另类性三渗透| 国产精品久久久999| 成人免费高清完整版在线观看| 欧美成人精品在线播放| 国产精品99久久久久久久久久久久| 97视频在线观看网址| 日韩成人在线网站| 粉嫩av一区二区三区免费野| 国内精品久久久久| 欧美最猛性xxxxx(亚洲精品)| 中文字幕国产亚洲| 97香蕉超级碰碰久久免费软件| 欧美在线视频免费观看| 亚洲精品国产品国语在线| 国产成人精品综合久久久| 日韩电影免费在线观看| 91情侣偷在线精品国产| 成人精品aaaa网站| 亚洲影影院av| 亚洲一区第一页| 国产suv精品一区二区| 亚洲日本欧美日韩高观看|