zoukankan      html  css  js  c++  java
  • 动态生成Zip

    动态生成Zip文档

     

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

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

    示例源代码下载

  • 相关阅读:
    day 01
    day14
    day12
    day13
    day11
    day9
    day10
    day08
    day07
    day06
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4899625.html
Copyright © 2011-2022 走看看