序言:

    在我接触Git和SVN之前,我最常用的保存数据的办法就是把文件夹压缩成一个zip文件,添加上时间戳。下面是我在学习C#的文件操作之后做的一个练习,使用开源的ICSharpZipLib来压缩文件夹并保存到指定的目录,还附带简单的日志文件。

 

简介:

    ICSharpZipLib是一个开源的应用于.NET平台的开源类库。运用C#语言和这个类库,我们可以很轻松地创建和操作压缩文件,例如:Zip,GZip, Tar and BZip2

 

源代码:

    废话不多说,咱直接上源代码。说实话,使用ICSharpZipLib的博客应该也有很多,但是试了一下好多不能用。下面的这个类是我根据一个印度程序员(英文网站上的,不知道到底是啥名字,但是长得很三哥!)的博客改写的。测试过的哦,亲!

  1: class CompressFolderIntoZip
  2: {
  3:     /// <summary>
  4:     /// 用来进行文件夹的压缩,输入参数源文件夹路径和目标文件夹路径即可。
  5:     /// </summary>
  6:     /// <param name="sourceFolderPath"></param>
  7:     /// <param name="destFolderPath"></param>
  8:     /// <returns></returns>
  9:     public static bool CompressFolder(string sourceFolderPath, string destFolderPath)
 10:     {
 11:         try
 12:         {
 13:             //文件名=文件夹名+时间戳+.zip;
 14:             string zipFileName = destFolderPath + "\\" +
 15:                 sourceFolderPath.Substring(sourceFolderPath.LastIndexOf('\\') + 1)
 16:                 + "(" + DateTime.Now.ToString("yyyy-MM-dd hh-mm-ss") + ").zip";
 17:             ZipFile zipFile = ZipFile.Create(zipFileName);
 18:             zipFile.BeginUpdate();
 19:             //压缩文件夹时默认采用源文件夹的上一级作为根目录;
 20:             AddFolderToZip(zipFile,
 21:                 sourceFolderPath.Substring(0, sourceFolderPath.LastIndexOf('\\')),
 22:                 sourceFolderPath);
 23:             zipFile.CommitUpdate();
 24:             zipFile.Close();
 25:         }
 26:         catch (Exception exception)
 27:         {
 28:             Console.WriteLine(exception.ToString());
 29:             return false;
 30:         }
 31:         return true;
 32:     }
 33:
 34:     /// <summary>
 35:     /// 该方法用来实现文件夹及其中文件和子文件夹的递归压缩
 36:     /// ZipFile zipFile=ZipFile.Create(string <zipfilename>)
 37:     /// folderPath是需要压缩的文件夹
 38:     /// root是压缩文件中的根目录,如果folderPath=@"C:\Test"而root=@"C:\"那么打开压缩文件会先显示一个名为Test的文件夹。如果folderPath=@"C:\Test"而root=@"C:\Test"那么压缩文件打开会直接显示Test文件夹下所有文件盒子文件夹。
 39:     /// </summary>
 40:     /// <param name="zipFile"></param>
 41:     /// <param name="root"></param>
 42:     /// <param name="folderPath"></param>
 43:     private static void AddFolderToZip(ZipFile zipFile, string root, string folderPath)
 44:     {
 45:         string relativePath = folderPath.Substring(root.Length);
 46:         if (relativePath.Length > 0)
 47:         {
 48:             zipFile.AddDirectory(relativePath);
 49:         }
 50:
 51:         foreach (string file in Directory.GetFiles(folderPath))
 52:         {
 53:             relativePath = file.Substring(root.Length);
 54:             zipFile.Add(file, relativePath);
 55:         }
 56:
 57:         foreach (string subFolder in Directory.GetDirectories(folderPath))
 58:         {
 59:             AddFolderToZip(zipFile, root, subFolder);
 60:         }
 61:     }
 62: }

 

使用ICSharpZipLib将文件夹压缩为zip文件的更多相关文章

  1. Java—将文件夹压缩为zip文件

    import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java ...

  2. 基于Python——实现解压文件夹中的.zip文件

    [背景]当一个文件夹里存好好多.zip文件需要解压时,手动一个个解压再给文件重命名是一件很麻烦的事情,基于此,今天介绍一种使用python实现批量解压文件夹中的压缩文件并给文件重命名的方法—— [代码 ...

  3. Java实现将文件或者文件夹压缩成zip

            最近碰到个需要下载zip压缩包的需求,于是我在网上找了下别人写好的zip工具类.但找了好多篇博客,总是发现有bug.因此就自己来写了个工具类.         这个工具类的功能为: ( ...

  4. 【转】Java实现将文件或者文件夹压缩成zip

    转自:https://www.cnblogs.com/zeng1994/p/7862288.html package com.guo.utils; import java.io.*; import j ...

  5. php将文件夹打包成zip文件

    function addFileToZip($path,$zip){    $handler=opendir($path); //打开当前文件夹由$path指定.    while(($filenam ...

  6. .net 生成html文件后压缩成zip文件并下载

    这里只做一个简单的实例 public ActionResult Index() { string path = Server.MapPath("/test/");//文件输出目录 ...

  7. SharpCompress的压缩文件解压和文件夹压缩

    1.前言 最近做一个功能需要用到对压缩文件的解压,就找到了这个SharpCompress不错,还能解压rar的文件.但是网上的资料和我拿到的SharpCompress.dll的方法有些出入,所以我就自 ...

  8. 【C#公共帮助类】WinRarHelper帮助类,实现文件或文件夹压缩和解压,实战干货

    关于本文档的说明 本文档使用WinRAR方式来进行简单的压缩和解压动作,纯干货,实际项目这种压缩方式用的少一点,一般我会使用第三方的压缩dll来实现,就如同我上一个压缩类博客,压缩的是zip文件htt ...

  9. SharpZipLib 文件/文件夹压缩

    一.ZipFile ZipFile类用于选择文件或文件夹进行压缩生成压缩包. 常用属性: 属性 说明 Count 文件数目(注意是在ComitUpdat之后才有) Password 压缩包密码 Siz ...

随机推荐

  1. 浅谈MS-SQL锁机制

    锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 脏 ...

  2. Zookeeper的一致性协议:Zab(转)

    Zookeeper使用了一种称为Zab(Zookeeper Atomic Broadcast)的协议作为其一致性复制的核心,据其作者说这是一种新发算法,其特点是充分考虑了Yahoo的具体情况:高吞吐量 ...

  3. [King.yue]关于代码调试时的缓存问题的一个解决办法

    后台构造数据更改之后,页面数据一直不变,试过各种办法,清空浏览器缓存,停止端口重新运行,关掉程序重新打开,都不可以.最终全部重新生成之后,终于可以正常调试了. 另:调试ASP.NET网站程序的时候,为 ...

  4. 【原】Spark on YARN

    在YARN上运行Spark 在Spark0.6.0版本开始支持YARN模式,随后的版本在逐渐地完善. 在YARN上启动Spark 确保HADOOP_CONF_DIR或YARN_CONF_DIR属性的值 ...

  5. HW4.7

    public class Solution { public static void main(String[] args) { double rate = 0.05; double balance ...

  6. groupinfo

    http://www.wenzizone.com/2011/07/07/centos_x64_yum_da_jian_xen.html [yum xen] 配置epel就不说了,ruiy哥的文档有; ...

  7. 问题.NETSystem.Data.OleDb.OleDbException 操作必须使用一个可更新的查询

    问题:System.Data.OleDb.OleDbException 操作必须使用一个可更新的查询 问题现象:用asp.net连access数据库,查询可以,插入数据报错.在.NET中F5可以使用方 ...

  8. map的基本操作函数及含义

    map的基本操作函数:      C++ Maps是一种关联式容器,包含“关键字/值”对      begin()          返回指向map头部的迭代器      clear()        ...

  9. 前端javascript规范文档 (http://www.xuanfengge.com/category/web)

    说明:本文档为前端JS规范 一.规范目的 为提高团队协作效率,便于前端后期优化维护,输出高质量的文档. 二.基本准则 符合web标准,结构表现行为分离,兼容性优良.页面性能方面,代码要求简洁明了有序, ...

  10. [SCOI2005]互不侵犯King

    题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. ——by洛谷 https://www. ...