• 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 { getprivate 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();
       }
  • 相关阅读:
    避免Node.js中回调地狱
    XSS和CSRF攻击
    浅析SPDY
    移动端的图片优化
    js中的事件委托技术
    js的5种继承方式——前端面试
    深入理解前端跨域问题的解决方案——前端面试
    javascript中“use strict”的好处和坏处
    Http请求中POST与GET的区别——前端面试
    滚动条离底部的距离小于某个值
  • 原文地址:https://www.cnblogs.com/jeriffe/p/2470112.html
Copyright © 2020-2023  润新知