天天看点

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#