码迷,mamicode.com
首页 > 其他好文 > 详细

动态生成Zip

时间:2015-10-22 01:39:23      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

通过前面一篇烂文的介绍,大伙儿知道,ZipArchive类表示一个zip文档实例,除了用上一篇文章中所列的方法来读写zip文件外,还可以直接通过ZipArchive类,动态生成zip文件。

文件流操作相信.net dev们不会陌生,ZipArchive既可以在内存中创建zip文档,也可以创建到新的zip文件中。因为ZipArchive类的构造函数需要传入一个Stream对象来读写,这个Stream可以是内存的流,当然也可以是文件流。

创建ZipArchive实例后,直接调用CreateEntry方法就可以创建压缩文档中的压缩项,创建后会返回一个ZipArchiveEntry实例。

CreateEntry方法需要指定创建的压缩项实体的名字,即zip文档中文件的名字。

如果名字为abc.jpg,那么文件abc.jpg就存储到zip的根目录下。如果想让压缩项有层次性,可以指定相对路径。

比如,指定为one\\abc.txt,那么,就会在zip文档根目录下创建一个名为one的目录,再在one目录下创建文件abc.txt。“\\”可以写成“/”,即one/abc.txt。

再如,输入名称a/b/d.doc,就会在zip文档中创建a目录,再在a目录下创建b目录,最后在b目录下创建文件d.doc。

 

ZipArchiveEntry实例创建后,可以调用Open方法,方法会返回一个流对象,通过这个流对象,就可以往压缩文件中写入数据了。

 

当zip文档完成后,调用ZipArchive实例的Dispose方法来释放资源。

 

 

接下来看一个例子:

技术分享
            using (FileStream fsout = new FileStream("test.zip", FileMode.OpenOrCreate, FileAccess.ReadWrite))
            {
                // 创建zip文档实例
                ZipArchive archive = new ZipArchive(fsout, ZipArchiveMode.Create);
                // 创建根目录下的文件
                ZipArchiveEntry entry1 = archive.CreateEntry("第一项.txt", CompressionLevel.Optimal);
                // 向文件写入内容
                using (StreamWriter wt = new StreamWriter(entry1.Open()))
                {
                    wt.WriteLine("这是压缩的第一个文件。");
                }
                // 创建位于相对目录的文件
                ZipArchiveEntry entry2 = archive.CreateEntry("第二项\\data.txt", CompressionLevel.Optimal);
                // 向文件写入内容
                using (StreamWriter wt =new StreamWriter(entry2.Open()))
                {
                    wt.WriteLine("这是压缩的第二个文件。");
                }
                // 创建第三个文件
                ZipArchiveEntry entry3 = archive.CreateEntry("第三项/document.txt", CompressionLevel.Optimal);
                // 向文件中写入内容
                using (StreamWriter wt = new StreamWriter(entry3.Open()))
                {
                    wt.WriteLine("这是压缩的第三个文件。");
                }

                // 操作完成后,要释放zip文档对象
                archive.Dispose();
            }
技术分享


上面代码创建的zip文档,结构如下:

技术分享

 

是不是很简单呢。好了,由于剧组资金严重不足,本期节目就到此结束了。

 

示例源代码下载

动态生成Zip

标签:

原文地址:http://www.cnblogs.com/Leo_wl/p/4899625.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!