Method to compress a file.
public void CompressFile ( string sourceFile, string destinationFile ){ // Check File exists in the source pathif ( File.Exists ( sourceFile ) == false )throw new FileNotFoundException ( );// Create the streams and byte arrays byte[] buffer = null;FileStream sourceStream = null;FileStream destinationStream = null;GZipStream compressedStream = null;try{ // Read the bytes from the source file into a byte arraysourceStream = new FileStream ( sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read );// Read the source stream values into the bufferbuffer = new byte[sourceStream.Length];int checkCounter = sourceStream.Read ( buffer, 0, buffer.Length );if ( checkCounter != buffer.Length ){ throw new ApplicationException ( );} // Open the FileStream to write destinationStream = new FileStream ( destinationFile, FileMode.OpenOrCreate, FileAccess.Write );// Create a compression stream pointing to the destiantion streamcompressedStream = new GZipStream ( destinationStream, CompressionMode.Compress, true );// Now write the compressed data to the destination filecompressedStream.Write ( buffer, 0, buffer.Length ); } catch ( ApplicationException ex ){ MessageBox.Show ( ex.Message, "Error occured during compression", MessageBoxButtons.OK, MessageBoxIcon.Error );} finally{ // Close all streamsif ( sourceStream != null )sourceStream.Close ( ); if ( compressedStream != null )compressedStream.Close ( ); if ( destinationStream != null )destinationStream.Close ( ); } }
Method to DeCompress a file.
public void DecompressFile ( string sourceFile, string destinationFile ){ // Check File exists in the source pathif ( File.Exists ( sourceFile ) == false )throw new FileNotFoundException ( );// Create the streams and byte arrays neededFileStream sourceStream = null;FileStream destinationStream = null;GZipStream decompressedStream = null;byte[] quartetBuffer = null;try{ // Read in the compressed source streamsourceStream = new FileStream ( sourceFile, FileMode.Open );// Create a compression stream pointing to the destiantion streamdecompressedStream = new GZipStream ( sourceStream, CompressionMode.Decompress, true );// Read the footer to determine the length of the destiantion filequartetBuffer = 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 bufferwhile ( true ){ int bytesRead = decompressedStream.Read ( buffer, offset, 100 );if ( bytesRead == 0 )break;offset += bytesRead; total += bytesRead; } // Now write to the destination filedestinationStream = new FileStream ( destinationFile, FileMode.Create );destinationStream.Write ( buffer, 0, total ); // Flush to clean out the bufferdestinationStream.Flush ( ); } catch ( ApplicationException ex ){ MessageBox.Show ( ex.Message, "An Error occured during compression", MessageBoxButtons.OK, MessageBoxIcon.Error );} finally{ // Close all streamsif ( sourceStream != null )sourceStream.Close ( ); if ( decompressedStream != null )decompressedStream.Close ( ); if ( destinationStream != null )destinationStream.Close ( ); } } |