【.NET深呼吸】Zip文件操作(2):动态生成Zip文档
2023-03-20 14:47:36 时间
通过前面一篇烂文的介绍,大伙儿知道,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文档,结构如下:
是不是很简单呢。好了,由于剧组资金严重不足,本期节目就到此结束了。
相关文章
- 关于.NET玩爬虫这些事
- 为什么 .NET的反射这么慢?
- 在ASP.NET Core中使用百度在线编辑器UEditor
- MVC路由自定义及视图找寻规则
- 构建高性能ASP.NET应用的12点建议
- 你了解AJAX吗?TA不是新编程语言而是WEB应用程序技术
- 从.net转型,聊聊最近一些面试,薪资和想法
- ASP.NET 5 开发者的五个阶段​​
- 让编程更轻松的 7 个 Visual Studio 扩展
- 对 ASP.NET 异步编程的一点理解
- 推荐 7 款好用的 Visual Studio 扩展
- 给ASP.NET MVC及WebApi添加路由优先级
- 10年.NET老程序员推荐的7个开发类工具
- 19 个必须知道的 Visual Studio 快捷键
- 迄今为止最全的.NET技术栈
- .NET中删除空白字符串的10大方法
- 详细的.Net并行编程高级教程--Parallel
- 如何用.NET生成二维码?
- .net程序员工作两年总结
- .NET中删除空白字符串的10大方法