-2

Possible Duplicate:
recommend a library/API to unzip file in C#

deal all plz suggest the ways to unzip file to selected folder using c#

Community
  • 1
  • 1
rajshades
  • 511
  • 4
  • 9
  • 21

4 Answers4

7

Have a look at the GZipStream, it's one of the built-in zip support in the framework, there's an example on the MSDN page: http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx

Here's the example from the MSDN page:

public class Program
{

    public static void Main()
    {
        // Path to directory of files to compress and decompress.
        string dirpath = @"c:\users\public\reports";

        DirectoryInfo di = new DirectoryInfo(dirpath);

        // Compress the directory's files.
        foreach (FileInfo fi in di.GetFiles())
        {
            Compress(fi);
        }

        // Decompress all *.gz files in the directory.
        foreach (FileInfo fi in di.GetFiles("*.gz"))
        {
            Decompress(fi);
        }
    }

    public static void Compress(FileInfo fi)
    {
        // Get the stream of the source file.
        using (FileStream inFile = fi.OpenRead())
        {
            // Prevent compressing hidden and 
            // already compressed files.
            if ((File.GetAttributes(fi.FullName) 
                & FileAttributes.Hidden)
                != FileAttributes.Hidden & fi.Extension != ".gz")
            {
                // Create the compressed file.
                using (FileStream outFile = 
                            File.Create(fi.FullName + ".gz"))
                {
                    using (GZipStream Compress = 
                        new GZipStream(outFile, 
                        CompressionMode.Compress))
                    {
                        // Copy the source file into 
                        // the compression stream.
                    inFile.CopyTo(Compress);

                        Console.WriteLine("Compressed {0} from {1} to {2} bytes.",
                            fi.Name, fi.Length.ToString(), outFile.Length.ToString());
                    }
                }
            }
        }
    }

    public static void Decompress(FileInfo fi)
    {
        // Get the stream of the source file.
        using (FileStream inFile = fi.OpenRead())
        {
            // Get original file extension, for example
            // "doc" from report.doc.gz.
            string curFile = fi.FullName;
            string origName = curFile.Remove(curFile.Length - 
                    fi.Extension.Length);

            //Create the decompressed file.
            using (FileStream outFile = File.Create(origName))
            {
                using (GZipStream Decompress = new GZipStream(inFile,
                        CompressionMode.Decompress))
                {
                    // Copy the decompression stream 
                    // into the output file.
                    Decompress.CopyTo(outFile);

                    Console.WriteLine("Decompressed: {0}", fi.Name);
                }
            }
        }
    }
}
theburningmonk
  • 15,701
  • 14
  • 61
  • 104
3

You have two options,

1) You can use the a 3rd party API, like DotNetZip (http://www.codeplex.com/DotNetZip)

2) Or you can use System.IO.Compression.DeflateStream. It requires .NET 2.0.

Bhaskar
  • 10,537
  • 6
  • 53
  • 64
  • 2
    No, `DeflateStream` is not capable of unzipping files. – Noldorin Aug 02 '10 at 09:41
  • I think it does - from MSDN "This class represents the Deflate algorithm, an industry standard algorithm for lossless file compression and decompression" -- http://msdn.microsoft.com/en-us/library/system.io.compression.deflatestream.aspx – Bhaskar Aug 02 '10 at 12:03
  • 3
    DeflateStream alone can not unzip a .zip file. In fact, the page you linked explicitly says, "This class does not inherently provide functionality for adding files to or extracting files from .zip archives." – Matthew Flaschen Aug 02 '10 at 14:09
1

Try to use FastZip to zip and unzip the files

Graviton
  • 81,782
  • 146
  • 424
  • 602
-1

In .NET there are two built-in ways to work with compressed streams. DeflateStream and GZipStream

DeflateStream ds = new DeflateStream(File.OpenRead(@"c:\myfolder\data.zip"), CompressionMode.Decompress);

GZipStream gZip = new GZipStream(File.OpenRead(@"c:\myfolder\data.zip"), CompressionMode.Decompress);
Peter Kelly
  • 14,253
  • 6
  • 54
  • 63