C#用Deflate流壓縮/解壓縮文件

UBOMerri 8年前發布 | 1K 次閱讀 C# c# 壓縮 Deflate

用Deflate流壓縮/解壓縮文件

Deflate流壓縮

using System.IO;
using System.IO.Compression;
string sourceFile=@"C:\1.txt";
string destinationFile=@"C:\1.bin";
    private const long BUFFER_SIZE = 20480;
       if ( File.Exists ( sourceFile ))
       {
            FileStream sourceStream = null;
            FileStream destinationStream = null;
            DeflateStream compressedStream = null;
            try
            {
                // Read the bytes from the source file into a byte array
                sourceStream = new FileStream ( sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read );

                // Open the FileStream to write to
                destinationStream = new FileStream ( destinationFile, FileMode.OpenOrCreate, FileAccess.Write );

                // Create a compression stream pointing to the destiantion stream
                compressedStream = new DeflateStream ( destinationStream, CompressionMode.Compress, true );
            long bufferSize = sourceStream.Length < BUFFER_SIZE ? sourceStream.Length : BUFFER_SIZE;   
            byte[] buffer = new byte[bufferSize];   
            int bytesRead = 0;   
            long bytesWritten = 0;   
            while ((bytesRead = sourceStream.Read(buffer, 0, buffer.Length)) != 0)   
            {   
                compressedStream.Write(buffer, 0, bytesRead);   
                bytesWritten += bufferSize;   
            }   

            }
            catch ( ApplicationException ex )
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                // Make sure we allways close all streams
                if ( sourceStream != null )
                    sourceStream.Close ( );

                if ( compressedStream != null )
                    compressedStream.Close ( );

                if ( destinationStream != null )
                    destinationStream.Close ( );
            }
        }

Deflate流解壓縮

using System.IO;
using System.IO.Compression;
string sourceFile=@"C:\1.bin";
string destinationFile=@"C:\1.txt";
        private const long BUFFER_SIZE = 20480;
            // make sure the source file is there
            if (File.Exists ( sourceFile ))
            {
            FileStream sourceStream = null;
            FileStream destinationStream = null;
            DeflateStream decompressedStream = null;
            byte[] quartetBuffer = null;
            try
            {
                // Read in the compressed source stream
                sourceStream = new FileStream ( sourceFile, FileMode.Open );

                // Create a compression stream pointing to the destiantion stream
                decompressedStream = new DeflateStream ( sourceStream, CompressionMode.Decompress, true );

                // Read the footer to determine the length of the destiantion file
                quartetBuffer = new byte[4];
                int position = (int)sourceStream.Length - 4;
                sourceStream.Position = position;
                sourceStream.Read ( quartetBuffer, 0, 4 );
                sourceStream.Position = 0;
                int checkLength = BitConverter.ToInt32 ( quartetBuffer, 0 );

                byte[] buffer = new byte[checkLength + 100];

                int offset = 0;
                int total = 0;

                // Read the compressed data into the buffer
                while ( true )
                {
                    int bytesRead = decompressedStream.Read ( buffer, offset, 100 );

                    if ( bytesRead == 0 )
                        break;

                    offset += bytesRead;
                    total += bytesRead;
                }

                // Now write everything to the destination file
                destinationStream = new FileStream ( destinationFile, FileMode.Create );
                destinationStream.Write ( buffer, 0, total );

                // and flush everyhting to clean out the buffer
                destinationStream.Flush ( );
            }
            catch ( ApplicationException ex )
            {
                Console.WriteLine(ex.Message, "解壓文件時發生錯誤:");
            }
            finally
            {
                // Make sure we allways close all streams
                if ( sourceStream != null )
                    sourceStream.Close ( );

                if ( decompressedStream != null )
                    decompressedStream.Close ( );

                if ( destinationStream != null )
                    destinationStream.Close ( );
            }
            }
 本文由用戶 UBOMerri 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!