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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!