Csharp/C#教程:c#使用DotNetZip封装类操作zip文件(创建/读取/更新)实例分享

下载地址在这里: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#实现的文件操作封装类完整实例【删除,移动,复制,重命名】

标签: zip 封装 操作 更新 ip 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

(0)
上一篇 2021年10月22日
下一篇 2021年10月22日

精彩推荐