c# 文件压缩zip或将zip文件解压的方法

 更新时间:2018年03月22日 09:17:43   作者:FeiJerry  
下面小编就为大家分享一篇c# 文件压缩zip或将zip文件解压的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

1.必须Dll:

ICSharpCode.SharpZipLib.dll。可从Nutget程序包中获取。

2.压缩文件

/// <summary>
/// 压缩文件成zip
/// </summary>
/// <param name="fileZip">压缩成zip文件的绝对路径</param>
/// <param name="fileName">被压缩指定文件的名字</param>
/// <param name="zipFilePath"></param>
/// <returns></returns>
public bool CreateZipFile(string fileZip,string fileName, string zipFilePath)
  {
   bool isZip = false;
   if (!Directory.Exists(zipFilePath))
   {
    Logger.Info($"Cannot find directory {zipFilePath}", false, "FileToZip");
    return isZip;
   }
   try
   {
    string[] filenames = Directory.GetFiles(zipFilePath);
    using (ZipOutputStream s = new ZipOutputStream(File.Create(fileZip)))
    {
     s.SetLevel(9); // 压缩级别 0-9
     //s.Password = "123"; //Zip压缩文件密码
     byte[] buffer = new byte[4096]; //缓冲区大小
     foreach (string file in filenames.ToList())
     {
      if (file== zipFilePath+fileName)//指定被压缩文件的绝对路径
      {
       ZipEntry entry = new ZipEntry(Path.GetFileName(file));
       entry.DateTime = DateTime.Now;
       s.PutNextEntry(entry);
       using (FileStream fs = File.OpenRead(file))
       {
        int sourceBytes;
        do
        {
         sourceBytes = fs.Read(buffer, 0, buffer.Length);
         s.Write(buffer, 0, sourceBytes);
        } while (sourceBytes > 0);
        fs.Close();
        fs.Dispose();
       }
       break;
      }
     }
     s.Finish();
     s.Close();
     isZip = true;
    }
   }
   catch (Exception ex)
   {
    Logger.Info($"Exception during processing {0}", false, "FileToZip");
   }
   return isZip;
  }

3.将zip文件解压

/// <summary>
/// 解压文件
/// </summary>
/// <param name="zipFilePath">压缩文件的绝对路径</param>
 public void UnZipFile(string zipFilePath)
  {
   if (!File.Exists(zipFilePath))
   {
    Logger.Info($"Cannot find file {zipFilePath}", false, "FileToZip");
    return;
   }
   using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
   {
    ZipEntry theEntry;
    while ((theEntry = s.GetNextEntry()) != null)
    {
     string directoryName = Path.GetDirectoryName(theEntry.Name);
     string fileName = Path.GetFileName(theEntry.Name);
     // create directory
     if (directoryName?.Length > 0)
     {
      Directory.CreateDirectory(directoryName);
     }
     if (!string.IsNullOrEmpty(fileName))
     {
      using (FileStream streamWriter = File.Create(theEntry.Name))
      {
       int size = 2048;
       byte[] data = new byte[2048];
       while (true)
       {
        size = s.Read(data, 0, data.Length);
        if (size > 0)
        {
         streamWriter.Write(data, 0, size);
        }
        else
        {
         break;
        }
       }
      }
     }
    }
   }
  }

4.其它:其中的Logger是Log4的用法。

以上这篇c# 文件压缩zip或将zip文件解压的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C#汉字转拼音实例(支持多音字)

    C#汉字转拼音实例(支持多音字)

    几年前就在网上看到过汉字转拼音的程序,大都就是按汉字的编码转换,单字对应的算法实现的。但是都有一个共同的缺点,不能支持多音字。本篇文章主要介绍了C#汉字转拼音实例(支持多音字),有兴趣的可以了解一下。
    2016-12-12
  • C#递归算法之快速排序

    C#递归算法之快速排序

    快速排序由C.A.R发明,它依据中心元素的值,利用一系列递归调用将数据表划分成越来越小的子表。在每一步调用中,经过多次的交换,最终为中心元素找到最终的位置。
    2016-06-06
  • 基于WPF实现简单的文件夹比较工具

    基于WPF实现简单的文件夹比较工具

    文件比较平常都是用Beyond Compare,可以说离不开的神器,不过Beyond Compare平常拿它主要是用来做代码比较,用来做一些大批量的二进制文件比较,其实有点不是很方便,所以本文来用WPF做一个简单的文件夹比较的小工具
    2023-05-05
  • C# 获取属性名的方法

    C# 获取属性名的方法

    C# 获取属性名的方法实例,需要的朋友可以参考一下
    2013-03-03
  • 深入c# GDI+简单绘图的具体操作步骤(一)

    深入c# GDI+简单绘图的具体操作步骤(一)

    本篇文章是对GDI的基础知识进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 改进c# 代码的五个技巧(二)

    改进c# 代码的五个技巧(二)

    这篇文章主要介绍了改进c# 代码的五个技巧(二),帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2021-01-01
  • C#面向对象编程中里氏替换原则的示例详解

    C#面向对象编程中里氏替换原则的示例详解

    在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解、灵活和可维护。本文将通过实例详细讲讲C#面向对象编程中里氏替换原则,需要的可以参考一下
    2022-07-07
  • C# 泛型类(函数)的实例化小例子

    C# 泛型类(函数)的实例化小例子

    C# 泛型类(函数)的实例化小例子,需要的朋友可以参考一下
    2013-04-04
  • C#实现过滤sql特殊字符的方法集合

    C#实现过滤sql特殊字符的方法集合

    这篇文章主要介绍了C#实现过滤sql特殊字符的方法,以实例形式分析总结了C#针对SQL危险字符的几种常用的过滤技巧,非常具有实用价值,需要的朋友可以参考下
    2015-11-11
  • C#获取机器码的方法详解(机器名,CPU编号,硬盘编号,网卡mac等)

    C#获取机器码的方法详解(机器名,CPU编号,硬盘编号,网卡mac等)

    这篇文章主要介绍了C#获取机器码的方法,结合实例形式详细分析了C#获取硬件机器名、CPU编号、硬盘编号、网卡mac等信息的相关实现方法,需要的朋友可以参考下
    2016-07-07

最新评论