在项目开发中,一些比较常用的功能就是压缩解压文件了,其实类似的方法有许多 ,现将通过第三方类库SharpZipLib来压缩解压文件的方法介绍如下,主要目的是方便以后自己阅读,当然可以帮到有需要的朋友更好了,代码比较简单。

public class ZipAndUnzipFileBySharpZipLib
    {
        /// <summary>
        /// 解压文件
        /// </summary>
        /// <param name="SrcFile"></param>
        /// <param name="DstFolder"></param>
        public static void UnZip(string SrcFile, string DstFolder)
        {
            FileStream fileStreamIn = new FileStream(SrcFile, FileMode.Open, FileAccess.Read);
            ZipInputStream zipInStream = new ZipInputStream(fileStreamIn);
            ZipEntry entry = zipInStream.GetNextEntry();
            while (entry != null)
            {
                FileStream fileStreamOut = new FileStream(DstFolder + @"\" + entry.Name, FileMode.Create, FileAccess.Write);
                int size;
                byte[] buffer = new byte[1024];
                do
                {
                    size = zipInStream.Read(buffer, 0, buffer.Length);
                    fileStreamOut.Write(buffer, 0, size);
                }
                while (size > 0);
                fileStreamOut.Close();

entry = zipInStream.GetNextEntry();
            }
            zipInStream.Close();
            fileStreamIn.Close();
        }

/// <summary>
        /// 压缩文件或目录
        /// </summary>
        /// <param name="srcPath"></param>
        /// <param name="dstFile"></param>
        public static void Zip(string srcPath, string dstFile)
        {
            bool isFile = false;
            bool isFolder = false;
            if(File.Exists(srcPath))
            {
                isFile = true;
            }
            if(Directory.Exists(srcPath))
            {
                isFolder = true;
            }
            if (isFile == false && isFolder == false) { return; }
            FileStream fileStreamOut = new FileStream(dstFile, FileMode.Create, FileAccess.Write);
            ZipOutputStream zipOutputStream = new ZipOutputStream(fileStreamOut);
            if(isFile)
            {
                ZipFile(srcPath,zipOutputStream);
            }
            if(isFolder)
            {
               IEnumerable<string> files = Directory.EnumerateFiles(srcPath);
               foreach (var file in files)
               {
                   ZipFile(file, zipOutputStream);
               }
            }
            zipOutputStream.Close();
            fileStreamOut.Close();
        }

/// <summary>
        /// 压缩文件
        /// </summary>
        /// <param name="srcFile">待压缩的文件路径</param>
        /// <param name="zipOutputStream">压缩stream</param>

private static void ZipFile(string srcFile,ZipOutputStream zipOutputStream)
        {
            FileStream fileStreamIn = new FileStream(srcFile, FileMode.Open, FileAccess.Read);
            byte[] buffer = new byte[1024];
            ZipEntry entry = new ZipEntry(Path.GetFileName(srcFile));
            zipOutputStream.PutNextEntry(entry);
            int size;
            do
            {
                size = fileStreamIn.Read(buffer, 0, buffer.Length);
                zipOutputStream.Write(buffer, 0, size);
            } while (size > 0);
            fileStreamIn.Close();
        }
    }

通过SharpZipLib来压缩解压文件的更多相关文章

  1. .NET使用ICSharpCode.SharpZipLib压缩/解压文件

    SharpZipLib是国外开源加压解压库,可以方便的对文件进行加压/解压 1.下载ICSharpCode.SharpZipLib.dll,并复制到bin目录下 http://www.icsharpc ...

  2. C#使用SharpZipLib压缩解压文件

    #region 加压解压方法 /// <summary> /// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略) /// </summary> // ...

  3. huffman压缩解压文件【代码】

    距离上次写完哈夫曼编码已经过去一周了,这一周都在写huffman压缩解压,哎,在很多小错误上浪费了很多时间调bug.其实这个程序的最关键部分不是我自己想的,而是借鉴了某位园友的代码,但是,无论如何,自 ...

  4. 【转载】.NET压缩/解压文件/夹组件

    转自:http://www.cnblogs.com/asxinyu/archive/2013/03/05/2943696.html 阅读目录 1.前言 2.关于压缩格式和算法的基础 3.几种常见的.N ...

  5. linux压缩解压文件

    首先进入文件夹 cd /home/ftp2/1520/web 压缩方法一:压缩web下的888.com网站 zip -r 888.com.zip888.com 压缩方法二:将当前目录下的所有文件和文件 ...

  6. Freebsd下压缩解压文件详解

    压缩篇: 把/usr/webgames目录下的文件打包.命名为bak.tar.gz 放到/usr/db-bak目录里 下面命令可以在任意目录执行.无视当前目录和将要存放文件的目录.tar -zcvf ...

  7. 跨平台的zip文件压缩处理,支持压缩解压文件夹

    根据minizip改写的模块,需要zlib支持 输出的接口: #define RG_ZIP_FILE_REPLACE 0 #define RG_ZIP_FILE_APPEND 1 //压缩文件夹目录, ...

  8. tar压缩解压文件

    查看visualization1.5.tar.gz 压缩包里面的内容: $ tar -tf visualization1.5.tar.gz 解压指定文件JavascriptVisualRelease/ ...

  9. Ubuntu下压缩解压文件

    一般来说ubuntu 下带有tar 命令,可以用来解压和压缩之用.但是我们经常要与win下用户打交道,所以要安装一些解压工具如:rar zip 等命令. 如果要需要用到zip工具那么可以: sudo ...

随机推荐

  1. redis主从同步收到以下参数影响

      repl-ping-slave-period主从心跳ping的时间间隔.默认10 repl-timeout  从节点超时时间.默认60 repl-backlog-size  主节点保存操作日志的大 ...

  2. 初学Splunk

    splunk简介 https://www.splunk.com/zh-hans_cn/download.html splunk 简体中文版手册 http://docs.splunk.com/Docum ...

  3. django环境搭建和学习

    由于服务器down了好几天,前几天做的django的project全都在上面,无法继续开展工作,所以决定在本地重新部署一套virtualenv 之前没有好好整理过部署过程(其实也不难),所以决定写个随 ...

  4. JavaScript鼠标事件

    mousedown 鼠标被按下. mouseup 鼠标按钮被释放(抬起). click 鼠标左键(或中建)被单击. 事件触发顺序:mousedown>mouseup>click>db ...

  5. jquery如何获取对应表单元素?

    问题描述:我页面中有这样多个表单,我都是这个定义的,当我点击确定按钮时,此时能够获得相对应的表单对象,我该怎么获取到他的两个值呢? 解决方案: 页面元素 <form id="form1 ...

  6. QOS-QOS(服务质量)概述

    QOS-QOS(服务质量)概述 2018年7月7日  20:29 概述及背景: 1.  引入: 传统IP网络仅提供“尽力而为”的传输服务,网络有可用资源就转发,资源不足时就丢弃 新一代IP网络承载了 ...

  7. 【JDBC】一、JDBC连接数据库

    package com.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLExce ...

  8. UVA ~ 514 ~ Rails (栈)

    参考:https://blog.csdn.net/ZscDst/article/details/80266639 #include <iostream> #include <cstd ...

  9. python2中将Unicode编码的中文和str相互转换

    在python2x版本中 关于中文汉字转换 1.中文------字符串格式 >>> s = '汉字' >>> type(s) <type 'str'> ...

  10. 8.Mongodb备份与恢复

    1.备份 语法 mongodump -h dbhost -d dbname -o dbdirectory -h:服务器地址,也可以指定端口号 -d:需要备份的数据库名称 -o:备份的数据存放位置,此目 ...