Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Compressing / Decompressing Folders & Files

People also ask

Does compressing and decompressing files reduce quality?

There is no loss of fidelity, no loss of image quality, and no change in data associated with zipping or unzipping.

Does compressing a folder make it smaller?

You can compress, or zip, the file in Windows, which shrinks the size of the file but retains the original quality of your presentation. You can also compress the media files within the presentation so they're a smaller file size and easier to send.

What is compressing and decompressing files?

What is compression and decompression? Compression reduces the size of an application or document for storage or transmission. Compressed files are smaller, download faster, and easier to transport. Decompression or expansion restores the document or application to its original size.

Is it safe to compress folders?

If you want to keep files within folders but use the files sparingly, a great way to is to compress them. This method keeps them both organized and more lightweight, saving you space on your hard drive. And when you want to use the files, extract them from your compressed file.


The .Net 2.0 framework namespace System.IO.Compression supports GZip and Deflate algorithms. Here are two methods that compress and decompress a byte stream which you can get from your file object. You can substitute GZipStream for DefaultStream in the methods below to use that algorithm. This still leaves the problem of handling files compressed with different algorithms though.

public static byte[] Compress(byte[] data)
{
    MemoryStream output = new MemoryStream();

    GZipStream gzip = new GZipStream(output, CompressionMode.Compress, true);
    gzip.Write(data, 0, data.Length);
    gzip.Close();

    return output.ToArray();
}

public static byte[] Decompress(byte[] data)
{
    MemoryStream input = new MemoryStream();
    input.Write(data, 0, data.Length);
    input.Position = 0;

    GZipStream gzip = new GZipStream(input, CompressionMode.Decompress, true);

    MemoryStream output = new MemoryStream();

    byte[] buff = new byte[64];
    int read = -1;

    read = gzip.Read(buff, 0, buff.Length);

    while (read > 0)
    {
        output.Write(buff, 0, read);
        read = gzip.Read(buff, 0, buff.Length);
    }

    gzip.Close();

    return output.ToArray();
}

I've always used the SharpZip Library.

Here's a link


You can use a 3rd-party library such as SharpZip as Tom pointed out.

Another way (without going 3rd-party) is to use the Windows Shell API. You'll need to set a reference to the Microsoft Shell Controls and Automation COM library in your C# project. Gerald Gibson has an example at:

Internet Archive's copy of the dead page


As of .Net 1.1 the only available method is reaching into the java libraries.

Using the Zip Classes in the J# Class Libraries to Compress Files and Data with C#

Not sure if this has changed in recent versions.


My answer would be close your eyes and opt for DotNetZip. It's been tested by a large community.


GZipStream is a really good utility to use.


This is very easy to do in java, and as stated above you can reach into the java.util.zip libraries from C#. For references see:

java.util.zip javadocs
sample code

I used this a while ago to do a deep (recursive) zip of a folder structure, but I don't think I ever used the unzipping. If I'm so motivated I may pull that code out and edit it into here later.