Methods to compress file and decompress file using System.IO.Compression
Method to compress a file.
public void CompressFile ( string sourceFile, string destinationFile )
{
// Check File exists in the source path if ( 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 writedestinationStream =
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 streams if ( 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 path if ( File.Exists ( sourceFile ) == false ) throw new FileNotFoundException ( ); // Create the streams and byte arrays needed FileStream 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 buffer while ( 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 streams if ( sourceStream != null )sourceStream.Close ( );
if ( decompressedStream != null )decompressedStream.Close ( );
if ( destinationStream != null )destinationStream.Close ( );
}
}
Comments
Post a Comment