Skip to main content

Compressing and DeCompressing a File in C#

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 array

sourceStream =

new FileStream ( sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read );

// Read the source stream values into the buffer

buffer =

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 stream

compressedStream =

new GZipStream ( destinationStream, CompressionMode.Compress, true );

// Now write the compressed data to the destination file

compressedStream.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 stream

sourceStream =

new FileStream ( sourceFile, FileMode.Open );

// Create a compression stream pointing to the destiantion stream

decompressedStream =

new GZipStream ( 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 to the destination file

destinationStream =

new FileStream ( destinationFile, FileMode.Create );

destinationStream.Write ( buffer, 0, total );

// Flush to clean out the buffer

destinationStream.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

Popular posts from this blog

UML - Association, Aggregation, Composition, Generalization, Specialization, Realization and Dependency

Association Association is a simple relationship between two classes. For example A relationship between Professor Class and Student class is known as Association. Both Classes can exist without each other, so Professor and Student are two independent classes. In this kind of relationships there will not be any owner class. Both classes have their own life cycle. UML Notation:     Aggregation Aggregation is a special type of Association. It is known as “Has-A” relationship. For example A Department class can contain Professor Class. Here Department class is owner class. Here in this relationship even after deleting Department class, Professor Class can exits. UML Notation: Composition Composition is a special type of Aggregation. It is known as “Is-A” relationship. For example A University Class has many Department class. Here University and Department objects are dependent on each other. If we delete Univ...

C# Generic Factory

Implement Factory pattern using generics     public interface IDoWork   {       string DoWork();   }     Declare an Interface first by abstracting the common  functionality    Here I am taking the example of DoWork     public class Manager : IDoWork   {     public string DoWork()     {         return "Manager Manages School" ;     }   }     Implement the IDoWork in concrete classes as shown      public class Teacher : IDoWork     {         public string DoWork()         {             return "Teacher teaches student in school" ;         ...

SQL query - Table sorting

In this article we will learn how to sort the table values with out using dynamic query to improve performance. CREATE PROCEDURE SortingExample ( @sortFiled INT, @sortType INT  -- 1 for ASC, 2 for DESC ) AS BEGIN -- Create a table variable to store user data DECLARE @myTable TABLE ( UserID INT IDENTITY(1,1), UserName VARCHAR(50), Password VARCHAR(50), Email VARCHAR(50) ) -- Insert some data to table to work on that data INSERT INTO @myTable(UserName, Password, Email) VALUES ('Jack', 'JackPwd', 'jack@gmail.com') INSERT INTO @myTable(UserName, Password, Email) VALUES ('Anand', 'AnandPwd', 'raj@gmail.com') INSERT INTO @myTable(UserName, Password, Email) VALUES ('smith', 'smithPwd', 'smith@gmail.com') INSERT INTO @myTable(UserName, Password, Email) VALUES ('Brandy', 'BrandyPwd', 'tom@gmail.com') -- If @sortType = 1 then sort the selected field in ASC ord...