天天看點

SharpZipLib壓縮打包多個檔案

SharpZipLib是C#開源壓縮解壓縮元件 SharpZipLib可以很容易将多個檔案打包成一個zip包 使用版本:0.85.4.369 1.壓縮檔案: using (ZipFile zip = ZipFile.Create( @" E:\test.zip ")) 

    zip.BeginUpdate(); 

    zip.Add( @" C:\Test\file\file.txt ");

    zip.Add( @" C:\Test\image\image.jpg ");

    zip.CommitUpdate(); 

} 注意:這樣打包後的zip包是按照檔案路徑打包的,本例的zip包解壓後會是: 解壓根目錄/Image/image.jpg 解壓根目錄/File/file.txt 2.壓縮Stream或者字元串 我們如何添加字元串或者Stream?這個時候改IStaticDataSource接口閃亮登場了: namespace ICSharpCode.SharpZipLib.Zip

{

     public  interface IStaticDataSource

    {

        Stream GetSource();

    }

} 該接口有個傳回Stream的GetSource方法,我們可以實作該接口,進而支援字元串檔案或者byte[]的打包。 class StreamDataSource : IStaticDataSource

{

    public  byte[] Buffer {  get;  private  set; }

    public StreamDataSource( byte[] buffer)

   {

     Buffer = buffer;

   }

    public Stream GetSource()

   {

     return  new MemoryStream(Buffer);

   }

 } 實作了該接口後,那麼我們壓縮byte[]代碼就十分簡單了:   using (ZipFile zip = ZipFile.Create(destinationFile))

  {

     zip.BeginUpdate();

      foreach ( var item  in imageUnits)

     {

         buffer =  null;

          try

         {

             buffer = GetBytesFromUrl(Path.Combine(imageEntity.DownloadUrl, item.ImagePath));

         }

          catch

         {

         }

          if (buffer !=  null && buffer.Length >  0)

         {

             StreamDataSource dataSource =  new StreamDataSource(buffer);

             zip.Add(dataSource, item.ImagePath);

         }

     }

     zip.CommitUpdate();

   }

轉載于:https://www.cnblogs.com/jeriffe/archive/2012/04/25/2470112.html

c#