C# - ZIP 压缩流

参考资料

Overview

ZIP流是在NetFramework4.5 引入的目的是为了能够更好的操作ZIP文件,进行压缩解压等操作。与ZIP流相关的几个类是:

  1. ZipArchive 代表一个ZIP的压缩包文件
  2. ZipArchiveEntry 代表ZIP压缩包中的一个文件
  3. ZipFile 提供了一系列的静态方法来帮助用户更方便地操作ZIP文件,类似于File类的作用。

PS: 在使用之前请先添加程序集引用System.IO.CompressionSystem.IO.Compression.FileStream

ZipArchive常见操作

创建一个ZIP文件

using (FileStream fs = new FileStream("myZip.zip", FileMode.Create))
{
//打开压缩包
using (ZipArchive zipArchive = new ZipArchive(fs, ZipArchiveMode.Create))
{
//创建一个条目
ZipArchiveEntry entry = zipArchive.CreateEntry("HelloWorld.txt");
//在条目中写入内容
using (StreamWriter writer = new StreamWriter(entry.Open(), Encoding.Default))
{
writer.Write("I am 鲁迅认识的那只猹! Hello World");
}
}
}

向现有的ZIP压缩包中添加文件

using (FileStream fs = new FileStream("myZip.zip", FileMode.Open))
{
//打开压缩包,Mode 为Update模式
using (ZipArchive zipArchive = new ZipArchive(fs, ZipArchiveMode.Update))
{
//创建一个条目
ZipArchiveEntry entry = zipArchive.CreateEntry("AppendFile.txt");
//在条目中写入内容
using (StreamWriter writer = new StreamWriter(entry.Open(), Encoding.Default))
{
writer.Write("这是追加的内容!");
}
}
}

解压ZIP压缩包

using (FileStream fs = new FileStream("myZip.zip", FileMode.Open))
{
//打开压缩包,Mode 为Update模式
using (ZipArchive zipArchive = new ZipArchive(fs, ZipArchiveMode.Update))
{
//创建一个用来存放解压后的文件的目录
Directory.CreateDirectory("myZip");
//将所有的条目解压出来
foreach (var item in zipArchive.Entries)
{
//解压文件
item.ExtractToFile(@"myZip\" + item.Name);
}
}
}

ZipFile

方法 解释
FileZip.CreateFromDirectory 从一个目录创建ZIP压缩文件
FileZip.ExtractToDirectory 将ZIP压缩文件解压到目录中
FileZip.Open 打开一个ZIP压缩文件
FileZip.OpenRead 打开一个读取模式的ZIP压缩文件

ZipFileExtensions

ZipFileExtensions 为ZipArchive 和 ZipArchiveEntry 提供了一些更简便的方法,具体可以查看官方文档

C# - ZIP 压缩流的更多相关文章

  1. ZIP文件流压缩和解压

    前面写了一篇文章 "ZIP文件压缩和解压", 介绍了" SharpZipLib.Zip " 的使用, 最近的项目中,在使用的过程中, 遇到一些问题. 比如, 现 ...

  2. C# 对多个文件进行zip压缩

    本文使用的ICSharpCode.SharpZipLib.dll类库来实现文件压缩,你可以通过Nuget来安装此类库,或者到搜索引擎去搜索一下遍地都是.类库下载下来之后,添加到项目引用就可以了.下面这 ...

  3. [源码]ObjectIOStream 对象流 ByteArrayIOStream 数组流 内存流 ZipOutputStream 压缩流

    1.对象流 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File ...

  4. Zip压缩和解压缩

    这个功能完全依靠一个第三方的类,ICSharpCode.SharpZipLib.dll,只是在网上搜了大半天,都没有关于这个类的详细解释,搜索的demo也是各种错误,感觉作者完全没有跑过,就那么贸贸然 ...

  5. java ZIP压缩文件

    问题描述:     使用java ZIP压缩文件和目录 问题解决:     (1)单个文件压缩 注:     以上是实现单个文件写入压缩包的代码,注意其中主要是在ZipOutStream流对象中创建Z ...

  6. ZIP压缩输入/输出流

    ZIP是压缩文件的格式,使用ZIP可以节省空间 java将压缩/解压缩文件的方法都封装在java.util.zip包下,java实现了I/O数据流和网络数据流的单一接口,所以实现起来比较容易. 主要的 ...

  7. java压缩流

    java压缩流是为了减少传输时的数据量,可以将文件压缩成ZIP.JAR.GZIP等文件格式.

  8. Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream)

    Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我已经分享过很多的J ...

  9. java将文件打包成ZIP压缩文件的工具类实例

    package com.lanp; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...

随机推荐

  1. python字典添加元素和删除元素

    1. 添加字典元素 方法一:直接添加,给定键值对 #pycharm aa = {'人才':60,'英语':'english','adress':'here'} print(aa) # {'人才': 6 ...

  2. java容器一:Collection概述

    Collection概览 java容器有两类,第一类是Collection,存储的是对象的集合:第二类是Map,存储的是键值对(两个对象以及它们之间的对应关系)的集合 Collection接口下面有三 ...

  3. 【转】Senior Data Structure · 浅谈线段树(Segment Tree)

    本文章转自洛谷 原作者: _皎月半洒花 一.简介线段树 ps: _此处以询问区间和为例.实际上线段树可以处理很多符合结合律的操作.(比如说加法,a[1]+a[2]+a[3]+a[4]=(a[1]+a[ ...

  4. linux 防火墙 firewall 设置

    背景: 机房断电后导致机器关机重启,原先访问的地址访问不了,使用终端能访问到该服务器,服务启起来后,用curl + 地址能访问,但在外部浏览器访问不了该地址: 首先想到了端口限制----防火墙 参考博 ...

  5. 阿里云上遇到: virtual memory exhausted: Cannot allocate memory

    # dd if=/dev/zero of=/swap bs=1024 count=1M Format the swap file: # mkswap /swap Enable the swap fil ...

  6. Selenium常用API的使用java语言之4-环境安装之Selenium

    1.通过jar包安装 点击Selenium下载 链接 你会看到Selenium Standalone Server的介绍: The Selenium Server is needed in order ...

  7. HDU-1028-Ignatius and the Princess III(母函数)

    链接: https://vjudge.net/problem/HDU-1028 题意: "Well, it seems the first problem is too easy. I wi ...

  8. [Angular] Using Pipe for function memoization

    Sometimes we might have some expensive function to calcuate state directly from template: <div cl ...

  9. 在jQuery中使用自定义属性

    在jquery中 自定义属性及值默认以下都是在class='acitve'对象中 进行自定义属性操作:1,自定义属性格式:data-xxxx2,获取该属性值: $('.active').data('x ...

  10. 【安卓进阶】Product Flavor基础玩法

    在安卓项目开发中,大多时候总是有测试环境.生产环境之类的区别,在不使用Product Flavor时,我们一般都是通过手工改动代码来实现测试环境.生产环境的切换. 这样就造成了项目管理上的不便,频繁的 ...