好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

c#打包文件解压缩的实例

首先要引用一下类库:using ionic.zip;这个类库可以到网上下载。

下面对类库使用的封装方法:

得到指定的输入流的zip压缩流对象

?

/// < summary >

       /// 得到指定的输入流的zip压缩流对象【原有流对象不会改变】

       /// </ summary >

       /// < param name = "sourcestream" ></ param >

       /// < returns ></ returns >

       public static stream zipcompress(stream sourcestream, string entryname = "zip")

       {

         memorystream compressedstream = new memorystream();

         if (sourcestream != null)

         {

           long sourceoldposition = 0;

           try

           {

             sourceoldposition = sourcestream.position;

             sourcestream.position = 0;

             using (zipfile zip = new zipfile())

             {

               zip.addentry(entryname, sourcestream);

               zip.save(compressedstream);

               compressedstream.position = 0;

             }

           }

           catch

           {

           }

           finally

           {

             try

             {

               sourcestream.position = sourceoldposition;

             }

             catch

             {

             }

           }

         }

         return compressedstream;

       }

得到指定的字节数组的zip解压流对象

?

/// < summary >

       /// 得到指定的字节数组的zip解压流对象

       /// 当前方法仅适用于只有一个压缩文件的压缩包,即方法内只取压缩包中的第一个压缩文件

       /// </ summary >

       /// < param name = "sourcestream" ></ param >

       /// < returns ></ returns >

       public static stream zipdecompress(byte[] data)

       {

         stream decompressedstream = new memorystream();

         if (data != null)

         {

           try

           {

             memorystream datastream = new memorystream(data);

             using (zipfile zip = zipfile.read(datastream))

             {

               if (zip.entries.count > 0)

               {

                 zip.entries.first().extract(decompressedstream);

                 // extract方法中会操作ms,后续使用时必须先将stream位置归零,否则会导致后续读取不到任何数据

                 // 返回该stream对象之前进行一次位置归零动作

                 decompressedstream.position = 0;

               }

             }

           }

           catch

           {

           }

         }

         return decompressedstream;

       }

压缩zip文件

?

/// < summary >

       /// 压缩zip文件

       /// 支持多文件和多目录,或是多文件和多目录一起压缩

       /// </ summary >

       /// < param name = "list" >待压缩的文件或目录集合</ param >

       /// < param name = "strzipname" >压缩后的文件名</ param >

       /// < param name = "isdirstruct" >是否按目录结构压缩</ param >

       /// < returns >成功:true/失败:false</ returns >

       public static bool compressmulti(list< string > list, string strzipname, bool isdirstruct)

       {

         try

         {

           using (zipfile zip = new zipfile(encoding.default))//设置编码,解决压缩文件时中文乱码

           {

             foreach (string path in list)

             {

               string filename = path.getfilename(path);//取目录名称

               //如果是目录

               if (directory.exists(path))

               {

                 if (isdirstruct)//按目录结构压缩

                 {

                   zip.adddirectory(path, filename);

                 }

                 else//目录下的文件都压缩到zip的根目录

                 {

                   zip.adddirectory(path);

                 }

               }

               if (file.exists(path))//如果是文件

               {

                 zip.addfile(path,"imges");

               }

             }

             zip.save(strzipname);//压缩

             return true;

           }

         }

         catch (exception)

         {

           return false;

         }

       }

解压zip文件

?

/// < summary >

       /// 解压zip文件

       /// </ summary >

       /// < param name = "strzippath" >待解压的zip文件</ param >

       /// < param name = "strunzippath" >解压的目录</ param >

       /// < param name = "overwrite" >是否覆盖</ param >

       /// < returns >成功:true/失败:false</ returns >

       public static bool decompression(string strzippath, string strunzippath, bool overwrite)

       {

         try

         {

           readoptions options = new readoptions();

           options.encoding = encoding.default;//设置编码,解决解压文件时中文乱码

           using (zipfile zip = zipfile.read(strzippath, options))

           {

             foreach (zipentry entry in zip)

             {

               if (string.isnullorempty(strunzippath))

               {

                 strunzippath = strzippath.split('.').first();

               }

               if (overwrite)

               {

                 entry.extract(strunzippath, extractexistingfileaction.overwritesilently);//解压文件,如果已存在就覆盖

               }

               else

               {

                 entry.extract(strunzippath, extractexistingfileaction.donotoverwrite);//解压文件,如果已存在不覆盖

               }

             }

             return true;

           }

         }

         catch (exception)

         {

           return false;

         }

       }

以上动图由[图斗罗]提供

这篇c#打包文件解压缩的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:http://HdhCmsTestcnblogs测试数据/ldyblogs/archive/2017/11/21/package.html

dy("nrwz");

查看更多关于c#打包文件解压缩的实例的详细内容...

  阅读:45次