c#2.0中新增的两个压缩类

来源:CSDN 作者: 2007-01-30 出处:pcdog.com

.net  access  解压缩  

.NET Framework 2.0 中新增的两个压缩类

System.IO.Compression 命名空间 
 注意:此命名空间在 .NET Framework 2.0 版中是新增的。
System.IO.Compression 命名空间包含提供基本的流压缩和解压缩服务的类。

(downmoon原作)
  类                               说明
 DeflateStream         提供用于使用 Deflate 算法压缩和解压缩流的方法和属性。
 GZipStream             提供用于压缩和解压缩流的方法和属性。
  枚举                         说明
 CompressionMode 指定是否压缩或解压缩基础流。

下面以 GZipStream  为例说明

注意:此类在 .NET Framework 2.0 版中是新增的。

提供用于压缩和解压缩流的方法和属性。
命名空间:System.IO.Compression
程序集:System(在 system.dll 中)
语法
Visual Basic(声明)
Public Class GZipStream
    Inherits Stream
 Visual Basic(用法)
Dim instance As GZipStream
 
C#
public class GZipStream : Stream
 
C++
public ref class GZipStream : public Stream
 
J#
public class GZipStream extends Stream
 
JScript
public class GZipStream extends Stream
 

备注
此类表示 GZip 数据格式,它使用无损压缩和解压缩文件的行业标准算法。这种格式包括一个检测数据损坏的循环冗余校验值。GZip 数据格式使用的算法与 DeflateStream 类的算法相同,但它可以扩展以使用其他压缩格式。这种格式可以通过不涉及专利使用权的方式轻松实现。gzip 的格式可以从 RFC 1952“GZIP file format specification 4.3(GZIP 文件格式规范 4.3)GZIP file format specification 4.3(GZIP 文件格式规范 4.3)”中获得。此类不能用于压缩大于 4 GB 的文件。

给继承者的说明 当从 GZipStream 继承时,必须重写下列成员:CanSeek、CanWrite 和 CanRead。

下面提供 一个完整的压缩与解压类(downmoon原作 ):

 

c#2.0中新增的两个压缩类(图一)class clsZip
c#2.0中新增的两个压缩类(图二)c#2.0中新增的两个压缩类(图三)    ...{
c#2.0中新增的两个压缩类(图四)        public void CompressFile ( string sourceFile, string destinationFile )
c#2.0中新增的两个压缩类(图五)c#2.0中新增的两个压缩类(图六)        ...{
c#2.0中新增的两个压缩类(图四)            // make sure the source file is there
c#2.0中新增的两个压缩类(图四)            if ( File.Exists ( sourceFile ) == false )
c#2.0中新增的两个压缩类(图四)                throw new FileNotFoundException ( );
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)            // Create the streams and byte arrays needed
c#2.0中新增的两个压缩类(图四)            byte[] buffer = null;
c#2.0中新增的两个压缩类(图四)            FileStream sourceStream = null;
c#2.0中新增的两个压缩类(图四)            FileStream destinationStream = null;
c#2.0中新增的两个压缩类(图四)            GZipStream compressedStream = null;
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)            try
c#2.0中新增的两个压缩类(图五)c#2.0中新增的两个压缩类(图六)            ...{
c#2.0中新增的两个压缩类(图四)                // Read the bytes from the source file into a byte array
c#2.0中新增的两个压缩类(图四)       sourceStream = new FileStream ( sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read );
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)                // Read the source stream values into the buffer
c#2.0中新增的两个压缩类(图四)                buffer = new byte[sourceStream.Length];
c#2.0中新增的两个压缩类(图四)                int checkCounter = sourceStream.Read ( buffer, 0, buffer.Length );
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)                if ( checkCounter != buffer.Length )
c#2.0中新增的两个压缩类(图五)c#2.0中新增的两个压缩类(图六)                ...{
c#2.0中新增的两个压缩类(图四)                    throw new ApplicationException ( );
c#2.0中新增的两个压缩类(图七)                }
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)                // Open the FileStream to write to
c#2.0中新增的两个压缩类(图四)          destinationStream = new FileStream ( destinationFile, FileMode.OpenOrCreate, FileAccess.Write );
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)                // Create a compression stream pointing to the destiantion stream
c#2.0中新增的两个压缩类(图四)                compressedStream = new GZipStream ( destinationStream, CompressionMode.Compress, true );
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)                // Now write the compressed data to the destination file
c#2.0中新增的两个压缩类(图四)                compressedStream.Write ( buffer, 0, buffer.Length );
c#2.0中新增的两个压缩类(图七)            }
c#2.0中新增的两个压缩类(图四)            catch ( ApplicationException ex )
c#2.0中新增的两个压缩类(图五)c#2.0中新增的两个压缩类(图六)            ...{
c#2.0中新增的两个压缩类(图四)                MessageBox.Show ( ex.Message, "压缩文件时发生错误:", MessageBoxButtons.OK, MessageBoxIcon.Error );
c#2.0中新增的两个压缩类(图七)            }
c#2.0中新增的两个压缩类(图四)            finally
c#2.0中新增的两个压缩类(图五)c#2.0中新增的两个压缩类(图六)            ...{
c#2.0中新增的两个压缩类(图四)                // Make sure we allways close all streams
c#2.0中新增的两个压缩类(图四)                if ( sourceStream != null )
c#2.0中新增的两个压缩类(图四)                    sourceStream.Close ( );
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)                if ( compressedStream != null )
c#2.0中新增的两个压缩类(图四)                    compressedStream.Close ( );
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)                if ( destinationStream != null )
c#2.0中新增的两个压缩类(图四)                    destinationStream.Close ( );
c#2.0中新增的两个压缩类(图七)            }
c#2.0中新增的两个压缩类(图七)        }
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)        public void DecompressFile ( string sourceFile, string destinationFile )
c#2.0中新增的两个压缩类(图五)c#2.0中新增的两个压缩类(图六)        ...{
c#2.0中新增的两个压缩类(图四)            // make sure the source file is there
c#2.0中新增的两个压缩类(图四)            if ( File.Exists ( sourceFile ) == false )
c#2.0中新增的两个压缩类(图四)                throw new FileNotFoundException ( );
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)            // Create the streams and byte arrays needed
c#2.0中新增的两个压缩类(图四)            FileStream sourceStream = null;
c#2.0中新增的两个压缩类(图四)            FileStream destinationStream = null;
c#2.0中新增的两个压缩类(图四)            GZipStream decompressedStream = null;
c#2.0中新增的两个压缩类(图四)            byte[] quartetBuffer = null;
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)            try
c#2.0中新增的两个压缩类(图五)c#2.0中新增的两个压缩类(图六)            ...{
c#2.0中新增的两个压缩类(图四)                // Read in the compressed source stream
c#2.0中新增的两个压缩类(图四)                sourceStream = new FileStream ( sourceFile, FileMode.Open );
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)                // Create a compression stream pointing to the destiantion stream
c#2.0中新增的两个压缩类(图四)                decompressedStream = new GZipStream ( sourceStream, CompressionMode.Decompress, true );
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)                // Read the footer to determine the length of the destiantion file
c#2.0中新增的两个压缩类(图四)                quartetBuffer = new byte[4];
c#2.0中新增的两个压缩类(图四)                int position = (int)sourceStream.Length - 4;
c#2.0中新增的两个压缩类(图四)                sourceStream.Position = position;
c#2.0中新增的两个压缩类(图四)                sourceStream.Read ( quartetBuffer, 0, 4 );
c#2.0中新增的两个压缩类(图四)                sourceStream.Position = 0;
c#2.0中新增的两个压缩类(图四)                int checkLength = BitConverter.ToInt32 ( quartetBuffer, 0 );
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)                byte[] buffer = new byte[checkLength + 100];
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)                int offset = 0;
c#2.0中新增的两个压缩类(图四)                int total = 0;
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)                // Read the compressed data into the buffer
c#2.0中新增的两个压缩类(图四)                while ( true )
c#2.0中新增的两个压缩类(图五)c#2.0中新增的两个压缩类(图六)                ...{
c#2.0中新增的两个压缩类(图四)                    int bytesRead = decompressedStream.Read ( buffer, offset, 100 );
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)                    if ( bytesRead == 0 )
c#2.0中新增的两个压缩类(图四)                        break;
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)                    offset += bytesRead;
c#2.0中新增的两个压缩类(图四)                    total += bytesRead;
c#2.0中新增的两个压缩类(图七)                }
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)                // Now write everything to the destination file
c#2.0中新增的两个压缩类(图四)                destinationStream = new FileStream ( destinationFile, FileMode.Create );
c#2.0中新增的两个压缩类(图四)                destinationStream.Write ( buffer, 0, total );
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)                // and flush everyhting to clean out the buffer
c#2.0中新增的两个压缩类(图四)                destinationStream.Flush ( );
c#2.0中新增的两个压缩类(图七)            }
c#2.0中新增的两个压缩类(图四)            catch ( ApplicationException ex )
c#2.0中新增的两个压缩类(图五)c#2.0中新增的两个压缩类(图六)            ...{
c#2.0中新增的两个压缩类(图四)                MessageBox.Show(ex.Message, "解压文件时发生错误:", MessageBoxButtons.OK, MessageBoxIcon.Error);
c#2.0中新增的两个压缩类(图七)            }
c#2.0中新增的两个压缩类(图四)            finally
c#2.0中新增的两个压缩类(图五)c#2.0中新增的两个压缩类(图六)            ...{
c#2.0中新增的两个压缩类(图四)                // Make sure we allways close all streams
c#2.0中新增的两个压缩类(图四)                if ( sourceStream != null )
c#2.0中新增的两个压缩类(图四)                    sourceStream.Close ( );
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)                if ( decompressedStream != null )
c#2.0中新增的两个压缩类(图四)                    decompressedStream.Close ( );
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图四)                if ( destinationStream != null )
c#2.0中新增的两个压缩类(图四)                    destinationStream.Close ( );
c#2.0中新增的两个压缩类(图七)            }
c#2.0中新增的两个压缩类(图四)
c#2.0中新增的两个压缩类(图七)        }
c#2.0中新增的两个压缩类(图八)    }


上一篇:c#.net中类的覆写(OverRide)
下一篇:c# MD5加密算法的实例