Compression Helper Class using SharpZipLib

使用 SharpZipLib 进行压缩的辅助类,简化压缩字节数组和字符串的操作。

using System;

using System.Text;

using System.IO;

using ICSharpCode.SharpZipLib.BZip2;

using ICSharpCode.SharpZipLib.GZip;

using ICSharpCode.SharpZipLib.Zip;

 

namespace Compression

{

    /// <summary>

    /// 压缩方式。

    /// </summary>

    public enum CompressionType

    {

        GZip,

        BZip2,

        Zip

    }

 

    /// <summary>

    /// 使用 SharpZipLib 进行压缩的辅助类,简化压缩字节数组和字符串的操作。

    /// </summary>

    public class CompressionHelper

    {

        /// <summary>

        /// 压缩供应者,默认为 GZip。

        /// </summary>

        public static CompressionType CompressionProvider = CompressionType.GZip;

 

        #region Public methods

 

        /// <summary>

        /// 从原始字节数组生成已压缩的字节数组。

        /// </summary>

        /// <param name="bytesToCompress">原始字节数组。</param>

        /// <returns>返回已压缩的字节数组</returns>

        public static byte[] Compress( byte[] bytesToCompress )

        {

            MemoryStream ms = new MemoryStream();

            Stream s = OutputStream( ms );

            s.Write( bytesToCompress, 0, bytesToCompress.Length );

            s.Close();

            return ms.ToArray();

        }

 

        /// <summary>

        /// 从原始字符串生成已压缩的字符串。

        /// </summary>

        /// <param name="stringToCompress">原始字符串。</param>

        /// <returns>返回已压缩的字符串。</returns>

        public static string Compress( string stringToCompress )

        {

            byte[] compressedData = CompressToByte( stringToCompress );

            string strOut = Convert.ToBase64String( compressedData );

            return strOut;

        }

 

        /// <summary>

        /// 从原始字符串生成已压缩的字节数组。

        /// </summary>

        /// <param name="stringToCompress">原始字符串。</param>

        /// <returns>返回已压缩的字节数组。</returns>

        public static byte[] CompressToByte( string stringToCompress )

        {

            byte[] bytData = Encoding.Unicode.GetBytes( stringToCompress );

            return Compress( bytData );

        }

 

        /// <summary>

        /// 从已压缩的字符串生成原始字符串。

        /// </summary>

        /// <param name="stringToDecompress">已压缩的字符串。</param>

        /// <returns>返回原始字符串。</returns>

        public string DeCompress( string stringToDecompress )

        {

            string outString = string.Empty;

            if ( stringToDecompress == null )

            {

                throw new ArgumentNullException("stringToDecompress", "You tried to use an empty string");

            }

 

            try

            {

                byte[] inArr = Convert.FromBase64String(stringToDecompress.Trim());

                outString = Encoding.Unicode.GetString(DeCompress(inArr));

            }

            catch (NullReferenceException  nEx)

            {

                return nEx.Message;

            }

 

            return outString;

        }

 

        /// <summary>

        /// 从已压缩的字节数组生成原始字节数组。

        /// </summary>

        /// <param name="bytesToDecompress">已压缩的字节数组。</param>

        /// <returns>返回原始字节数组。</returns>

        public static byte[] DeCompress( byte[] bytesToDecompress )

        {

            byte[] writeData = new byte[4096];

            Stream s2 = InputStream( new MemoryStream( bytesToDecompress ) );

            MemoryStream outStream = new MemoryStream();

 

            while (true)

            {

                int size = s2.Read( writeData, 0, writeData.Length );

                if ( size > 0 )

                {

                    outStream.Write( writeData, 0, size );

                }

                else

                {

                    break;

                }

            }

            s2.Close();

            byte[] outArr = outStream.ToArray();

            outStream.Close();

            return outArr;

        }

 

        #endregion

 

        #region Private methods

 

        /// <summary>

        /// 从给定的流生成压缩输出流。

        /// </summary>

        /// <param name="inputStream">原始流。</param>

        /// <returns>返回压缩输出流。</returns>

        private static Stream OutputStream( Stream inputStream )

        {

            switch ( CompressionProvider )

            {

                case CompressionType.BZip2:

                    return new BZip2OutputStream( inputStream );

 

                case CompressionType.GZip:

                    return new GZipOutputStream( inputStream );

 

                case CompressionType.Zip:

                    return new ZipOutputStream( inputStream );

 

                default:

                    return new GZipOutputStream( inputStream );

            }

        }

 

        /// <summary>

        /// 从给定的流生成压缩输入流。

        /// </summary>

        /// <param name="inputStream">原始流。</param>

        /// <returns>返回压缩输入流。</returns>

        private static Stream InputStream( Stream inputStream )

        {

            switch (CompressionProvider)

            {

                case CompressionType.BZip2:

                    return new BZip2InputStream(inputStream);

 

                case CompressionType.GZip:

                    return new GZipInputStream(inputStream);

 

                case CompressionType.Zip:

                    return new ZipInputStream(inputStream);

 

                default:

                    return new GZipInputStream(inputStream);

            }

        }

 

        #endregion

    }

}

来源:http://www.mostlylucid.co.uk/archive/2004/04/06/958.aspx

时间: 2024-11-14 16:37:04

Compression Helper Class using SharpZipLib的相关文章

C#中利用SharpZipLib进行压缩和解压

压缩 我在做项目的时候需要将文件进行压缩和解压缩,于是就从http://www.icsharpcode.net下载了关于压缩和解压缩的源码,但是下载下来后,面对这么多的代码,一时不知如何下手.只好耐下心来,慢慢的研究,总算找到了门路.针对自己的需要改写了文件压缩和解压缩的两个类,分别为ZipClass和UnZipClass.其中碰到了不少困难,就决定写出来压缩和解压的程序后,一定把源码贴出来共享,让首次接触压缩和解压缩的朋友可以少走些弯路.下面就来解释如何在C#里用http://www.icsh

C#利用SharpZipLib解压或压缩文件夹实例操作

最近要做一个项目涉及到C#中压缩与解压缩的问题的解决方法,大家分享. 这里主要解决文件夹包含文件夹的解压缩问题. )下载SharpZipLib.dll,在http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx中有最新免费版本,"Assemblies for .NET 1.1, .NET 2.0, .NET CF 1.0, .NET CF 2.0: Download [297 KB] "点击Download可以下载,

asp.net C#实现解压缩文件的方法_实用技巧

本文实例讲述了asp.net C#实现解压缩文件的方法.一共给大家介绍了三段代码,一个是简单的解压缩单个zip文件,后一个可以解压批量的大量的但需要调用ICSharpCode.SharpZipLib.dll类了,最后一个比较实例可压缩也可以解压缩了分享给大家供大家参考.具体如下: 解压缩单个文件: 复制代码 代码如下: using System.IO; using System.IO.Compression; string sourceFile=@"D:2.zip"; string d

asp.net C#解压缩/文件程序代码

解压缩单个文件  代码如下 复制代码 using System.IO; using System.IO.Compression; string sourceFile=@"D:2.zip"; string destinationFile=@"D:1.txt";         private const long BUFFER_SIZE = 20480;             // make sure the source file is there        

C#利用sharpziplib的方法浅析

C#语言有很多值得学习的地方,这里我们主要介绍C#利用sharpziplib,包括介绍压缩和解压缩的两个类,分别为 ZipClass和UnZipClass等方面. 在做项目的时候需要将文件进行压缩和解压缩,于是就从http://www.icsharpcode.net下载了关于压缩和解压缩的源码,但是下载下来后,面对这么多的代码,一时不知如何下手.只好耐下心来,慢慢的研究,总算找到了门路.针对自己的需要改写了文件压缩和解压缩的两个类,分别为 ZipClass和UnZipClass.其中碰到了不少困

C#使用ICSharpCode.SharpZipLib压缩文件[转]

本文来自CSDN博客,出处:http://blog.csdn.net/venus0314/archive/2006/09/25/1280610.aspx   一直以来都是采用WinZIP进行压缩的,调用起来方便,而且公司也有版权,所以就没有考虑过其他的东东.不过唯一不足的地方就是需要安装(包括Win Zip和其Command Line Addon),而且需要让程序知道调用的WinZIP路径,配置起来不是很方便. 本次项目,考虑到程序的易配置性,决定采用另外别的方式进行压缩,找了找就找到了ICSh

C# 下利用ICSharpCode.SharpZipLib.dll实现文件/文件夹压缩、解压缩

ICSharpCode.SharpZipLib.dll下载地址 1.压缩某个指定目录下日志,将日志压缩到CompressionDirectory文件夹中,并清除原来未压缩日志. #region 压缩logs目录下日志 public static void CompresslogDic() { try { string logFilePath = AppDomain.CurrentDomain.BaseDirectory + "logs"; DirectoryInfo logsDic =

Csharp 利用ICSharpCode.SharpZipLib解壓文件

/* *http://www.koders.com/csharp/fid7241B3C8598C20BA18652B5BB5C19D220988E2D4.aspx?s=file * http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx * http://www.eggheadcafe.com/tutorials/aspnet/9ce6c242-c14c-4969-9251-af95e4cf320f/zip--unzip-f

ASP.NET: SQL DAL Helper

asp.net The SQL Server DAL Helper is a utility application that generates Data Access Layer (DAL) functions from stored procedures in a SQL Server database. The only characteristic of the stored procedure that the application does not automagically d