前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用SharpZipLib压缩打包多个内存中的文件

使用SharpZipLib压缩打包多个内存中的文件

作者头像
深蓝studyzy
发布2022-06-16 14:53:48
2.3K0
发布2022-06-16 14:53:48
举报
文章被收录于专栏:深蓝居

SharpZipLib是C#写的开源压缩解压缩组件,最近项目上遇到一个需求:根据用户选择的项目生成CSV文件并下载,后来改为同时生成2个CSV文件下载下来。想到的解决办法就是将2个CSV文件打包成一个Zip文件,然后供用户下载。

SharpZipLib可以通过很简单的代码就将多个文件打包成一个zip包,形如:

using (ZipFile zip = ZipFile.Create(@"E:\test.zip")) {     zip.BeginUpdate();     ZipEntry e=new ZipEntry("a");     //添加文件     zip.Add(@"E:\a.csv");     zip.Add(@"E:\b.csv");     zip.CommitUpdate(); }

但是这里的问题是,zip.Add方法允许添加文件,但是不允许直接添加字符串或者byte[],但是我们做的是WebApplication,不希望是在Web服务器上把两个CSV文件生成后保存到硬盘上,然后调用上面的方法压缩硬盘上的文件。我们的文件应该都是在内存中生成,在内存中打包,然后直接把生成的zip文件的二进制流返回给用户,让用户下载。幸好该方法提供了一个IStaticDataSource接口参数,该接口有个返回Stream的GetSource方法,我们可以实现该接口,从而支持字符串文件的打包。

class StringDataSource : IStaticDataSource {     public string Str { get; set; }

    public StringDataSource(string str)     {         this.Str = str;     }

    public Stream GetSource()     {         Stream s = new MemoryStream(Encoding.Default.GetBytes(Str));         return s;     } }

实现了该接口后,那么我们压缩两个String成两个文本文件的包,代码就十分简单了:

using (ZipFile zip = ZipFile.Create(@"E:\test2.zip")) {     zip.BeginUpdate();     StringDataSource d1 = new StringDataSource("this a test1");     StringDataSource d2 = new StringDataSource("压缩文件2的内容");     //添加文件     zip.Add(d1, "Test1.txt");     zip.Add(d2, "Test2.txt");     zip.CommitUpdate(); }

上面的代码还是在硬盘上生成了test2.zip,幸好ZipFile.Create方法支持Stream参数,于是可以将代码改为:

MemoryStream stream=new MemoryStream(); using (ZipFile zip = ZipFile.Create(stream)) {     zip.BeginUpdate();     StringDataSource d1 = new StringDataSource("this a test1");     StringDataSource d2 = new StringDataSource("压缩文件2的内容");     //添加文件     zip.Add(d1, "Test1.txt");     zip.Add(d2, "Test2.txt");     zip.CommitUpdate(); }

然后将stream继续Render给用户即可。

同样的方式,如果是在内存中生成了二进制文件,也可以使用实现IStaticDataSource接口的方式来打包。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档