• Zip 解压缩


      1 /// <summary>   
      2 /// Zip 压缩文件   
      3 /// </summary>   
      4 public class Zip   
      5 {   
      6     public Zip()   
      7     {   
      8            
      9     }  
     10     #region 加压方法   
     11     /// <summary>   
     12     /// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略)   
     13     /// </summary>   
     14     /// <param name="dirPath">被压缩的文件夹夹路径</param>   
     15     /// <param name="zipFilePath">生成压缩文件的路径,为空则默认与被压缩文件夹同一级目录,名称为:文件夹名+.zip</param>   
     16     /// <param name="err">出错信息</param>   
     17     /// <returns>是否压缩成功</returns>   
     18     public static bool ZipFile(string dirPath, string zipFilePath, out string err)   
     19     {   
     20         err = "";   
     21         if (dirPath == string.Empty)   
     22         {   
     23             err = "要压缩的文件夹不能为空!";   
     24             return false;   
     25         }   
     26         if (!Directory.Exists(dirPath))   
     27         {   
     28             err = "要压缩的文件夹不存在!";   
     29             return false;   
     30         }   
     31         //压缩文件名为空时使用文件夹名+.zip   
     32         if (zipFilePath == string.Empty)   
     33         {   
     34             if (dirPath.EndsWith("\\"))   
     35             {   
     36                 dirPath = dirPath.Substring(0, dirPath.Length - 1);   
     37             }   
     38             zipFilePath = dirPath + ".zip";   
     39         }   
     40   
     41         try  
     42         {   
     43             string[] filenames = Directory.GetFiles(dirPath);   
     44             using (ZipOutputStream s = new ZipOutputStream(File.Create(zipFilePath)))   
     45             {   
     46                 s.SetLevel(9);   
     47                 byte[] buffer = new byte[4096];   
     48                 foreach (string file in filenames)   
     49                 {   
     50                     ZipEntry entry = new ZipEntry(Path.GetFileName(file));   
     51                     entry.DateTime = DateTime.Now;   
     52                     s.PutNextEntry(entry);   
     53                     using (FileStream fs = File.OpenRead(file))   
     54                     {   
     55                         int sourceBytes;   
     56                         do  
     57                         {   
     58                             sourceBytes = fs.Read(buffer, 0, buffer.Length);   
     59                             s.Write(buffer, 0, sourceBytes);   
     60                         } while (sourceBytes > 0);   
     61                     }   
     62                 }   
     63                 s.Finish();   
     64                 s.Close();   
     65             }   
     66         }   
     67         catch (Exception ex)   
     68         {   
     69             err = ex.Message;   
     70             return false;   
     71         }   
     72         return true;   
     73     }  
     74     #endregion   
     75  
     76     #region 解压   
     77     /// <summary>   
     78     /// 功能:解压zip格式的文件。   
     79     /// </summary>   
     80     /// <param name="zipFilePath">压缩文件路径</param>   
     81     /// <param name="unZipDir">解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹</param>   
     82     /// <param name="err">出错信息</param>   
     83     /// <returns>解压是否成功</returns>   
     84     public static bool UnZipFile(string zipFilePath, string unZipDir, out string err)   
     85     {   
     86         err = "";   
     87         if (zipFilePath == string.Empty)   
     88         {   
     89             err = "压缩文件不能为空!";   
     90             return false;   
     91         }   
     92         if (!File.Exists(zipFilePath))   
     93         {   
     94             err = "压缩文件不存在!";   
     95             return false;   
     96         }   
     97         //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹   
     98         if (unZipDir == string.Empty)   
     99             unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));   
    100         if (!unZipDir.EndsWith("\\"))   
    101             unZipDir += "\\";   
    102         if (!Directory.Exists(unZipDir))   
    103             Directory.CreateDirectory(unZipDir);   
    104   
    105         try  
    106         {   
    107             using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))   
    108             {   
    109   
    110                 ZipEntry theEntry;   
    111                 while ((theEntry = s.GetNextEntry()) != null)   
    112                 {   
    113                     string directoryName = Path.GetDirectoryName(theEntry.Name);   
    114                     string fileName = Path.GetFileName(theEntry.Name);   
    115                     if (directoryName.Length > 0)   
    116                     {   
    117                         Directory.CreateDirectory(unZipDir + directoryName);   
    118                     }   
    119                     if (!directoryName.EndsWith("\\"))   
    120                         directoryName += "\\";   
    121                     if (fileName != String.Empty)   
    122                     {   
    123                         using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name))   
    124                         {   
    125   
    126                             int size = 2048;   
    127                             byte[] data = new byte[2048];   
    128                             while (true)   
    129                             {   
    130                                 size = s.Read(data, 0, data.Length);   
    131                                 if (size > 0)   
    132                                 {   
    133                                     streamWriter.Write(data, 0, size);   
    134                                 }   
    135                                 else  
    136                                 {   
    137                                     break;   
    138                                 }   
    139                             }   
    140                         }   
    141                     }   
    142                 }//while   
    143             }   
    144         }   
    145         catch (Exception ex)   
    146         {   
    147             err = ex.Message;   
    148             return false;   
    149         }   
    150         return true;   
    151     }//解压结束  
    152     #endregion  
    153 
    154 
    155 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ZZJ_4Ever/archive/2009/03/31/4038595.aspx
  • 相关阅读:
    Halcon二维仿射变换实例探究
    redis主从+哨兵实战
    单点安装redis+哨兵
    一个学习技术不错的网站
    reset master 不能乱用呀
    MySQL 5.7基于GTID的主从复制实践
    『浅入深出』MySQL 中事务的实现
    使用二进制包安装mysql
    jenkins+gitlab
    mysql的Innodb存储引擎提一嘴
  • 原文地址:https://www.cnblogs.com/sanmen/p/sanmen.html
Copyright © 2020-2023  润新知