How to compress and decompress files with GZip in .NET C#
January 23, 2015 2 Comments
You have probably seen compressed files with the “gz” extension. These are files that hold a single compressed file according to the GZIP specifications.
GZip files are represented by the GZipStream object in .NET. It’s important to note that the GZip format doesn’t support adding multiple files to the same .gz file. If you need to insert multiple files in a GZip file then you’ll need to create a “tar” file first which bundles the individual files and then compresses the tar file itself. The result will be a “.tar.gz” file. At present tar files are not supported in .NET. They are supported by the ICSharpCode SharpZipLib library available here. We’ll look at tar files in another post soon.
With that in mind let’s see how a single file can be gzipped:
FileInfo fileToBeGZipped = new FileInfo(@"c:\gzip\logfile.txt"); FileInfo gzipFileName = new FileInfo(string.Concat(fileToBeGZipped.FullName, ".gz")); using (FileStream fileToBeZippedAsStream = fileToBeGZipped.OpenRead()) { using (FileStream gzipTargetAsStream = gzipFileName.Create()) { using (GZipStream gzipStream = new GZipStream(gzipTargetAsStream, CompressionMode.Compress)) { try { fileToBeZippedAsStream.CopyTo(gzipStream); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } }
…and this is how you can decompress the gz file:
using (FileStream fileToDecompressAsStream = gzipFileName.OpenRead()) { string decompressedFileName = @"c:\gzip\decompressed.txt"; using (FileStream decompressedStream = File.Create(decompressedFileName)) { using (GZipStream decompressionStream = new GZipStream(fileToDecompressAsStream, CompressionMode.Decompress)) { try { decompressionStream.CopyTo(decompressedStream); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } }
Read all posts dedicated to file I/O here.
j’ai besoin d’un script c# permet de faire la decompression de toutes les donnée vers un repertoire
It is very usefull for my work. Thank you because of sharing the way 🙂