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

首頁 > 編程 > C# > 正文

C# 利用ICSharpCode.SharpZipLib實現在線壓縮和解壓縮

2020-01-24 01:13:01
字體:
來源:轉載
供稿:網友

壓縮包制作也是很多項目中需要用到的功能。比如有大量的文件(假設有10000個)需要上傳,1個1個的上傳似乎不太靠譜(靠,那得傳到什么時候?。浚?,這時我們可以制作一個壓縮包zip,直接傳這個文件到服務器端,然后在服務器目錄解壓,釋放里面的文件。

這里我們選用ICSharpCode.SharpZipLib這個類庫來實現我們的需求。

下載地址:http://icsharpcode.github.io/SharpZipLib/

該組件支持.NET 1.1, .NET 2.0 (3.5, 4.0), .NET CF 1.0, .NET CF 2.0

ICSharpCode.SharpZipLib提供了兩個壓縮算法的實現,分別是BZIP2(壓縮時間長,壓縮率高)和GZIP(壓縮效率高,壓縮率低)。

先定義一個枚舉,用于程序標示是哪個壓縮算法。

  /// <summary>  /// 壓縮枚舉  /// </summary>  public enum ZipEnum  {    //壓縮時間長,壓縮率高    BZIP2,    //壓縮效率高,壓縮率低    GZIP  }

單個文件的壓縮:

    #region 制作壓縮包(單個文件壓縮)    /// <summary>    /// 制作壓縮包(單個文件壓縮)    /// </summary>    /// <param name="sourceFileName">原文件</param>    /// <param name="zipFileName">壓縮文件</param>    /// <param name="zipEnum">壓縮算法枚舉</param>    /// <returns>壓縮成功標志</returns>    public static bool ZipFile(string srcFileName, string zipFileName, ZipEnum zipEnum)    {      bool flag = true;      try      {        switch (zipEnum)        {          case ZipEnum.BZIP2:            FileStream inStream = File.OpenRead(srcFileName);            FileStream outStream = File.Open(zipFileName, FileMode.Create);            //參數true表示壓縮完成后,inStream和outStream連接都釋放            BZip2.Compress(inStream, outStream, true, 4096);            inStream.Close();            outStream.Close();            break;          case ZipEnum.GZIP:            FileStream srcFile = File.OpenRead(srcFileName);            GZipOutputStream zipFile = new GZipOutputStream(File.Open(zipFileName, FileMode.Create));            byte[] fileData = new byte[srcFile.Length];            srcFile.Read(fileData, 0, (int)srcFile.Length);            zipFile.Write(fileData, 0, fileData.Length);            srcFile.Close();            zipFile.Close();            break;          default: break;        }      }      catch      {        flag = false;      }      return flag;    }    #endregion

單個文件的解壓縮:

    #region 解壓縮包(單個文件解壓縮)    /// <summary>    /// 解壓縮包(單個文件解壓縮)    /// </summary>    /// <param name="zipFileName">壓縮文件</param>    /// <param name="unzipFileName">解壓縮文件</param>    /// <param name="zipEnum">壓縮算法枚舉</param>    /// <returns>壓縮成功標志</returns>    public static bool UnZipFile(string zipFileName, string unzipFileName, ZipEnum zipEnum)    {      bool flag = true;      try      {        switch (zipEnum)        {          case ZipEnum.BZIP2:            FileStream inStream = File.OpenRead(zipFileName);            FileStream outStream = File.Open(unzipFileName, FileMode.Create);            BZip2.Decompress(inStream, outStream, true);            break;          case ZipEnum.GZIP:            GZipInputStream zipFile = new GZipInputStream(File.OpenRead(zipFileName));            FileStream destFile = File.Open(unzipFileName, FileMode.Create);            int bufferSize = 2048 * 2;            byte[] fileData = new byte[bufferSize];            while (bufferSize > 0)            {              bufferSize = zipFile.Read(fileData, 0, bufferSize);              zipFile.Write(fileData, 0, bufferSize);            }            destFile.Close();            zipFile.Close();            break;          default: break;        }      }      catch      {        flag = false;      }      return flag;    }    #endregion

上面的兩個方法在引用了dll后,可以直接使用。
看到這里,相信讀者有疑問了,如果我想讓多個文件壓縮到1個zip包里呢?甚至可以給文件加密?給zip包加注釋?
好吧,我這里繼續貼兩個方法,都經過測試,可用。

多文件的壓縮:

    #region 制作壓縮包(多個文件壓縮到一個壓縮包,支持加密、注釋)    /// <summary>    /// 制作壓縮包(多個文件壓縮到一個壓縮包,支持加密、注釋)    /// </summary>    /// <param name="topDirectoryName">壓縮文件目錄</param>    /// <param name="zipedFileName">壓縮包文件名</param>    /// <param name="compresssionLevel">壓縮級別 1-9</param>    /// <param name="password">密碼</param>    /// <param name="comment">注釋</param>    public static void ZipFiles(string topDirectoryName, string zipedFileName, int compresssionLevel, string password, string comment)    {      using (ZipOutputStream zos = new ZipOutputStream(File.Open(zipedFileName, FileMode.OpenOrCreate)))      {        if (compresssionLevel != 0)        {          zos.SetLevel(compresssionLevel);//設置壓縮級別        }        if (!string.IsNullOrEmpty(password))        {          zos.Password = password;//設置zip包加密密碼        }        if (!string.IsNullOrEmpty(comment))        {          zos.SetComment(comment);//設置zip包的注釋        }        //循環設置目錄下所有的*.jpg文件(支持子目錄搜索)        foreach (string file in Directory.GetFiles(topDirectoryName, "*.jpg", SearchOption.AllDirectories))        {          if (File.Exists(file))          {            FileInfo item = new FileInfo(file);            FileStream fs = File.OpenRead(item.FullName);            byte[] buffer = new byte[fs.Length];            fs.Read(buffer, 0, buffer.Length);            ZipEntry entry = new ZipEntry(item.Name);            zos.PutNextEntry(entry);            zos.Write(buffer, 0, buffer.Length);          }        }      }    }    #endregion

多文件的解壓縮:

    #region 解壓縮包(將壓縮包解壓到指定目錄)    /// <summary>    /// 解壓縮包(將壓縮包解壓到指定目錄)    /// </summary>    /// <param name="zipedFileName">壓縮包名稱</param>    /// <param name="unZipDirectory">解壓縮目錄</param>    /// <param name="password">密碼</param>    public static void UnZipFiles(string zipedFileName, string unZipDirectory, string password)    {      using (ZipInputStream zis = new ZipInputStream(File.Open(zipedFileName, FileMode.OpenOrCreate)))      {        if (!string.IsNullOrEmpty(password))        {          zis.Password = password;//有加密文件的,可以設置密碼解壓        }        ZipEntry zipEntry;        while ((zipEntry = zis.GetNextEntry()) != null)        {          string directoryName = Path.GetDirectoryName(unZipDirectory);          string pathName = Path.GetDirectoryName(zipEntry.Name);          string fileName = Path.GetFileName(zipEntry.Name);          pathName = pathName.Replace(".", "$");          directoryName += "http://" + pathName;          if (!Directory.Exists(directoryName))          {            Directory.CreateDirectory(directoryName);          }          if (!string.IsNullOrEmpty(fileName))          {            FileStream fs = File.Create(Path.Combine(directoryName, fileName));            int size = 2048;            byte[] bytes = new byte[2048];            while (true)            {              size = zis.Read(bytes, 0, bytes.Length);              if (size > 0)              {                fs.Write(bytes, 0, size);              }              else              {                break;              }            }            fs.Close();          }        }      }    }    #endregion

調用時我們可以這么寫:

ZipFileUtil.ZipFiles(@"E://test//", "E://test.zip", 1, "admin", "this is admin's comment.");//制作壓縮包 ZipFileUtil.UnZipFiles("E://test.zip", "E://guwei4037//", "admin");//解壓縮包 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一区亚洲一区| 91免费福利视频| 国产91精品黑色丝袜高跟鞋| 亚洲国产精品va在线看黑人动漫| 日韩精品在线播放| 最近2019中文字幕大全第二页| 欧美亚洲另类制服自拍| 亚洲视频在线观看免费| 久久99久久亚洲国产| 久热精品在线视频| 欧美国产视频日韩| 亚洲成人黄色在线观看| 久久成人精品视频| 欧美色图在线视频| 久久久久久久久久久91| 亚洲亚裔videos黑人hd| 日韩黄色在线免费观看| 成人中心免费视频| 日韩有码在线观看| 日韩成人激情在线| 国产精品1234| 97久久超碰福利国产精品…| 黑人巨大精品欧美一区二区三区| 欧美性感美女h网站在线观看免费| 深夜福利91大全| 国产精品久久中文| 一个人www欧美| 性欧美在线看片a免费观看| 国产美女精品免费电影| 午夜精品蜜臀一区二区三区免费| 午夜精品一区二区三区av| 日本精品va在线观看| 国内自拍欧美激情| 国产一区二区三区四区福利| 最新国产精品亚洲| 国产精品高潮在线| 国产日韩欧美中文在线播放| 国产精品91久久久久久| 欧美大片网站在线观看| 亚洲专区中文字幕| 国产精品视频大全| 久久精品国产免费观看| 日韩在线观看免费| 国产精品69久久久久| 亚洲人成网站777色婷婷| 国内精品久久久久久| 国产成人自拍视频在线观看| 丝袜亚洲欧美日韩综合| 日韩在线www| 亚洲电影免费在线观看| 91精品国产综合久久香蕉的用户体验| 久久精品国产69国产精品亚洲| 亚洲xxxxx| 精品色蜜蜜精品视频在线观看| 亚洲理论在线a中文字幕| 国产一区视频在线| 亚洲第一区第二区| 国产精品久久久av| 日韩精品一区二区视频| 国产性猛交xxxx免费看久久| 亚洲人成人99网站| 欧美怡红院视频一区二区三区| 国产精品video| 欧美成人手机在线| 久久伊人精品一区二区三区| 国产精品亚洲视频在线观看| 69国产精品成人在线播放| 欧美日韩亚洲一区二区| 欧美日韩中文字幕日韩欧美| 欧美成人剧情片在线观看| 日韩有码在线电影| 一区二区三区黄色| 欧美在线性爱视频| 亚洲精品美女免费| 久久精视频免费在线久久完整在线看| 最好看的2019年中文视频| 亚洲国产精品yw在线观看| 国产黑人绿帽在线第一区| 国产精品激情av电影在线观看| 91系列在线观看| 国产成人在线视频| 国产精品电影久久久久电影网| 亚洲aⅴ男人的天堂在线观看| 美女国内精品自产拍在线播放| 国产免费一区视频观看免费| 日韩av电影在线免费播放| 成人精品视频久久久久| 国内精品一区二区三区四区| 色99之美女主播在线视频| 日韩成人小视频| 国产精品av在线| 欧美性做爰毛片| 日韩在线中文视频| 亚洲欧美日韩综合| 久久91亚洲人成电影网站| 久久国产精品网站| 亚洲最大的网站| 国产美女被下药99| 日韩免费在线免费观看| 国产精品成人观看视频国产奇米| 69久久夜色精品国产69| 久热精品视频在线观看| 国产99久久精品一区二区永久免费| 国产精品入口福利| 久久久精品国产网站| 亚洲国产精品人久久电影| 国产主播在线一区| 日韩精品欧美激情| 亚洲人成亚洲人成在线观看| 国产一区二区三区在线视频| 国产日本欧美一区二区三区在线| 日韩视频欧美视频| 川上优av一区二区线观看| 欧美精品中文字幕一区| 欧美亚洲视频一区二区| 黄色成人av在线| 亚洲成色www8888| 国产日本欧美一区二区三区| 欧美国产日韩一区二区| 欧美在线视频导航| 亚洲另类图片色| 欧美另类在线播放| 国产精品视频久久久久| 国产福利视频一区二区| 欧美黄色三级网站| 97在线看免费观看视频在线观看| 亚洲韩国欧洲国产日产av| 尤物九九久久国产精品的特点| 国产欧美一区二区三区在线看| 中文字幕欧美精品在线| 日韩免费观看av| 中文字幕视频一区二区在线有码| 国产成人精品电影| 精品久久久久久久久久久久久久| 国产精品揄拍一区二区| 精品在线小视频| 欧美性受xxxx黑人猛交| 亚洲va欧美va国产综合剧情| 97婷婷大伊香蕉精品视频| 成年人精品视频| 日韩电影在线观看永久视频免费网站| 国产欧美日韩精品在线观看| 中文字幕亚洲一区二区三区五十路| 欧美成人黑人xx视频免费观看| 欧美精品国产精品日韩精品| 欧美人成在线视频| 欧美一区二区大胆人体摄影专业网站| 国产91精品最新在线播放| 亚洲精品美女久久| 欧美激情手机在线视频| 日本精品免费一区二区三区| 日韩欧美在线国产| 国产欧美日韩丝袜精品一区| 国产三级精品网站| 国产精品成人一区二区三区吃奶| 欧美亚洲成人精品| 国产精品国产福利国产秒拍| 久久伊人精品视频| 亚洲国产精久久久久久久| 国产日韩精品综合网站| 亚洲成人网久久久| 日韩av在线免费播放| 国产成人精品视频在线| 亚洲免费精彩视频|