zoukankan      html  css  js  c++  java
  • C#压缩解压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
    作者:Joe.Fan
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    【crontab】误删crontab及其恢复
    New Concept English there (7)
    New Concept English there (6)
    New Concept English there (5)
    New Concept English there (4)
    New Concept English there (3)
    New Concept English there (2)Typing speed exercise
    New Concept English there (1)Typing speed exercise
    New Concept English Two 34 game over
    New Concept English Two 33 94
  • 原文地址:https://www.cnblogs.com/fanxingthink/p/4530503.html
Copyright © 2011-2022 走看看