下载地址在这里:https://dotnetzip.codeplex.com/
下载到的包里有很多个dll文件,一般引用Ionic.Zip.dll就可以:
然后引用这个命名空间:
usingIonic.Zip;
以下是我自己封装的一个类:
代码如下:
///<summary>
///Zip操作基于DotNetZip的封装
///</summary>
publicstaticclassZipUtils
{
///<summary>
///得到指定的输入流的ZIP压缩流对象【原有流对象不会改变】
///</summary>
///<paramname=”sourceStream”></param>
///<returns></returns>
publicstaticStreamZipCompress(StreamsourceStream,stringentryName=”zip”)
{
MemoryStreamcompressedStream=newMemoryStream();
if(sourceStream!=null)
{
longsourceOldPosition=0;
try
{
sourceOldPosition=sourceStream.Position;
sourceStream.Position=0;
using(ZipFilezip=newZipFile())
{
zip.AddEntry(entryName,sourceStream);
zip.Save(compressedStream);
compressedStream.Position=0;
}
}
catch
{
}
finally
{
try
{
sourceStream.Position=sourceOldPosition;
}
catch
{
}
&n bsp; }
}
returncompressedStream;
}
///<summary>
///得到指定的字节数组的ZIP解压流对象
///当前方法仅适用于只有一个压缩文件的压缩包,即方法内只取压缩包中的第一个压缩文件
///</summary>
///<paramname=”sourceStream”></param>
///<returns></returns>
publicstaticStreamZipDecompress(byte[]data)
{
StreamdecompressedStream=newMemoryStream();
if(data!=null)
{
try
{
MemoryStreamdataStream=newMemoryStream(data);
using(ZipFilezip=ZipFile.Read(dataStream))
{
if(zip.Entries.Count>0)
{
zip.Entries.First().Extract(decompressedStream);
//Extract方法中会操作ms,后续使用时必须先将Stream位置归零,否则会导致后续读取不到任何数据
//返回该Stream对象之前进行一次位置归零动作
decompressedStream.Position=0;
}
}
}
catch
{
}
}
returndecompressedStream;
}
///<summary>
///压缩ZIP文件
///支持多文件和多目录,或是多文件和多目录一起压缩
///</summary>
///<paramname=”list”>待压缩的文件或目录集合</param>
///<paramname=”strZipName”>压缩后的文件名</param>
///<paramname=”IsDirStruct”>是否按目录结构压缩</param>
///<returns>成功:true/失败:false</returns>
publicstaticboolCompressMulti(List<string>list,stringstrZipName,boolIsDirStruct)
{
try
{
using(ZipFilezip=newZipFile(Encoding.Default))//设置编码,解决压缩文件时中文乱码
{
foreach(stringpathinlist)
{
stringfileName=Path.GetFileName(path);//取目录名称
//如果是目录
if(Directory.Exists(path))
{
if(IsDirStruct)//按目录结构压缩
{
zip.AddDirectory(path,fileName);
}
else//目录下的文件都压缩到Zip的根目录
{
zip.AddDirectory(path);
}
}
& nbsp; if(File.Exists(path))//如果是文件
{
zip.AddFile(path);
}
}
zip.Save(strZipName);//压缩
returntrue;
}
}
catch(Exception)
{
returnfalse;
}
}
///<summary>
///解压ZIP文件
///</summary>
///<paramname=”strZipPath”>待解压的ZIP文件</param>
///<paramname=”strUnZipPath”>解压的目录</param>
///<paramname=”overWrite”>是否覆盖</param>
///<returns>成功:true/失败:false</returns>
publicstaticboolDecompression(stringstrZipPath,stringstrUnZipPath,booloverWrite)
{
try
{
ReadOptionsoptions=newReadOptions();
options.Encoding=Encoding.Default;//设置编码,解决解压文件时中文乱码
using(ZipFilezip=ZipFile.Read(strZipPath,options))
{
foreach(ZipEntryentryinzip)
{
if(string.IsNullOrEmpty(strUnZipPath))
{
strUnZipPath=strZipPath.Split(‘.’).First();
}
if(overWrite)
{
entry.Extract(strUnZipPath,ExtractExistingFileAction.OverwriteSilently);//解压文件,如果已存在就覆盖
}
else
{
entry.Extract(strUnZipPath,ExtractExistingFileAction.DoNotOverwrite);//解压文件,如果已存在不覆盖
}
}
returntrue;
}
}
catch(Exception)
{
returnfalse;
}
}
}
使用方法:
1.压缩文件
代码如下:
List<string>list=newList<string>();
list.Add(@”D:Testss”);
list.Add(@”D:Testtest1.jpg”);
list.Add(@”D:公司文件.txt”);
list.Add(@”D:Testss.xml”);
boolisSuc=ZipUtils.CompressMulti(list,”D:\Test2.zip”,true);
2.解压文件
代码如下:
boolisSuc=ZipUtils.Decompression(“D:\Test\Test1.zip”,”D:\Teest”,true);
您可能感兴趣的文章:C#实现最完整的文件和目录操作类实例C#实现用于操作wav声音文件的类实例C#操作CSV文件类实例C#常用目录文件操作类实例C#封装的常用文件操作类实例C#中File类的文件操作方法详解C#的File类实现文件操作实例详解C#的FileInfo类实现文件操作实例c#文件助手类分享(读取文件内容操作日志文件)c#保存窗口位置大小操作类(序列化和文件读写功能)C#实现的文件操作封装类完整实例【删除,移动,复制,重命名】
C#中跨线程访问控件问题解决方案分享
c++ 尽量不要使用#define 而是用const、enum、inline替换。
上述就是C#学习教程:c#使用DotNetZip封装类操作zip文件(创建/读取/更新)实例分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/905044.html