【.NET深呼吸】Zip文件操作(2):动态生成Zip文档

作者: 梁丘刘峰

更新时间:2022-03-26 13:10:39

3896 阅读

通过前面一篇烂文的介绍,大伙儿知道,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文档,结构如下:

 

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

 

示例源代码下载

 

版权声明:本文著作权归作者【梁丘刘峰 】所有,不代表本网站立场。

侵权请联系:root_email@163.com

相关推荐