Zip文件操作
概述
.net的IO操作(System.IO.Compression)支持对zip文件的创建、读写和更新。
要求 :当.NET版本 大于或等于 .NET Framework 4.5.1 时才可用这个库
要对zip文件进行操作,主要用到以下三个类:
1、ZipFile。表示与一个zip文件操作相关的类。可以使用该类创建zip文件,或者打开zip文件。
2、ZipArchive。表示一个zip文档实例,可以通过它直接从流对象创建zip文档。ZipFile类主要是针对磁盘文件来进行操作,而ZipArchive表示的是zip包,不一定是存放在硬盘上的.zip文件,因为它可以基于流来创建,所以可以是存在于内存中,或者用于网络传输的数据。
3、ZipArchiveEntry。文档项实体。表示zip压缩包中的一个文件实体。zip文档中以文件为项实体,如果存在目录结构,就以当前文档为根,用相对路径来描述文件实体。比如:\目录1\目录2\文件1。
压缩
首先看一下如何从现有目录(包含该目录下的所有内容)来创建新的.zip文件。
ZipFile类公开了CreateFromDirectory方法,这个方法有几个重载,如果不考虑其他因素,只是简单创建.zip文件,可以使用以下重载:
static void CreateFromDirectory(string sourceDirectoryName, string destinationArchiveFileName)
方法不返回内容,sourceDirectoryName参数指定要用来创建压缩文档的源目录,destinationArchiveFileName就是新创建的压缩文件的完整路径,如c:\abc.zip。
如果想控制压缩级别,可以使用以下重载:
void CreateFromDirectory(string sourceDirectoryName, string destinationArchiveFileName, System.IO.Compression.CompressionLevel compressionLevel, bool includeBaseDirectory)
compressionLevel参数表示压缩的层次,includeBaseDirectory参数表示是否把sourceDirectoryName中的目录名也放到.zip文件的根中,如果是就为true,否则为false。
解压
与创建压缩文件相对,ZipFile类也公开了ExtractToDirectory方法,该方法的作用就是把指定.zip文件中的内容解压到指定的目录下。其中较简单的一个重载如下:
static void ExtractToDirectory(string sourceArchiveFileName, string destinationDirectoryName)
sourceArchiveFileName参数指定要解压的zip文件的完整路径或相对路径;destinationDirectoryName参数指定一个目录,被压的内容就放到这个目录下。
ZipArchive与ZipArchiveEntry
来看看如何扫描出.zip文件中的文件列表。
ZipFile类带了两个方法:要是只考虑对.zip文件进行只读处理,调用OpenRead方法就可以了。如果希望对文件进只读以外的处理,请调用Open方法。
不管你调用的是哪个方法,都会返回一个ZipArchive实例,它表示一个zip文档,我们在代码中可以对该文档进行访问或修改。
ZipArchive对象有个Entries属性,表示zip文件中所包含的文件列表,类型只会把压缩包中的文件视为一个实体,目录不被作为实体处理。该属性可以返回一个只读的ZipArchiveEntry实例列表,列表中的每一个ZipArchiveEntry对象表示压缩包中的一个文件,可以删除。
ZipArchiveEntry类有几个属性可以获取文件信息。
Name:文件名,不包含相对路径。
FullName:包含相对路径和文件名。
Length:压缩前文件大小。
CompressedLength:压缩后文件大小。
ICSharpCode.SharpZipLib
当.NET版本 小于 .NET Framework 4.5.1 时可以选择用此库
C# ICSharpCode.SharpZipLib.dll文件压缩和解压功能类整理,上传文件或下载文件很常用