How To Compress and Decompress Data

"Compression and Decompression" are very common words when transfering data from one place to another. Sometimes you have a large amount of data that cannot be transfered (for example mail attachment). You use software, such as Zip, to compress your data and then it is possible to transfer it. And at the other end, you decompress your data and get the original data back.

But if you are developing your own application that transfers data from one place to another (FTP) then that can take much time to transfer data because of the size of the data. At that time, when you want to embed a zipping method into your application, you just pass the data and after zipping, the data can be transferred; the Zip software will not be helpful.

I searched many materials for an explanation of how to do it; I got some code. I modified that code to satisfy my requirements and developed two functions; one to compress the data and the other to decompress it. You just need to pass your data file with a complete path and it will compress the file and decompress it too. You may even use your own extension and embed it in your application.

System.IO.Compression is the package. Use the GZip compression and decompression methods.

Use it and enjoy!

Compression

public static void Compress(string strPath)
{
     DateTime current;
     string dstFile = "";// "C:\\temp\\compressed-file.gzip";
     FileStream fsIn = null;
     FileStream fsOut = null;
     GZipStream gzip = null;
     byte[] buffer;
     int count = 0;
     try
     {
         current = DateTime.Now;
         dstFile = Application.StartupPath + "\\" + "Request" + current.Day.ToString() + current.Month.ToString() + current.Year.ToString() + current.Hour.ToString() + current.Minute.ToString() + current.Second.ToString() + ".zip"; // may use own extension
         fsOut = new FileStream(dstFile, FileMode.Create, FileAccess.Write, FileShare.None);
         gzip = new GZipStream(fsOut, CompressionMode.Compress, true);
         fsIn = new FileStream(strPath, FileMode.Open, FileAccess.Read, FileShare.Read);
         buffer = new byte[fsIn.Length];
         count = fsIn.Read(buffer, 0, buffer.Length);
         fsIn.Close();
         fsIn = null;
         // compress to the destination file
         gzip.Write(buffer, 0, buffer.Length);
   }
   catch (Exception ex)
   {
       // handle or display the error
       System.Diagnostics.Debug.Assert(false, ex.ToString());
   }
   finally
   {
       if (gzip != null)
       {
           gzip.Close();
           gzip = null;
       }
       if (fsOut != null)
       {
           fsOut.Close();
           fsOut = null;
       }
       if (fsIn != null)
       {
           fsIn.Close();
           fsIn = null;
       }
    }
}
public static void Decompress(string strPath)
{
    DateTime current;
    string dstFile = "";
    FileStream fsIn = null;
    FileStream fsOut = null;
    GZipStream gzip = null;
    const int bufferSize = 4096;
    byte[] buffer = new byte[bufferSize];
    int count = 0;
    try
    {
        current = DateTime.Now;
        dstFile = Application.StartupPath + "\\" + current.Day.ToString() + current.Month.ToString() + current.Year.ToString() + current.Hour.ToString() + current.Minute.ToString() + current.Second.ToString() + ".txt";
        fsIn = new FileStream(strPath, FileMode.Open, FileAccess.Read, FileShare.Read);
        fsOut = new FileStream(dstFile, FileMode.Create, FileAccess.Write, FileShare.None);
        gzip = new GZipStream(fsIn, CompressionMode.Decompress, true);
        while (true)
        {
            count = gzip.Read(buffer, 0, bufferSize);
            if (count != 0)
            {
                fsOut.Write(buffer, 0, count);
            }
            if (count != bufferSize)
            {
                // have reached the end
                break;
            }
        }
    }
    catch (Exception ex)
    {
        // handle or display the error
        System.Diagnostics.Debug.Assert(false, ex.ToString());
    }
    finally
    {
        if (gzip != null)
        {
            gzip.Close();
            gzip = null;
        }
        if (fsOut != null)
        {
            fsOut.Close();
            fsOut = null;
        }
        if (fsIn != null)
        {
            fsIn.Close();
            fsIn = null;
        }
    }
}


Similar Articles