Introduction
If you sometimes find yourself in a situation where you need to unzip some files but really don't like the thought of having to roll out the big artillery (i.e., third-party libraries), then this simple zip archive unzipper might be the thing for you. It consists of just a single source file of about 200 lines of code, and is thus easily incorporated into your application. This way, you don't have to worry about third-party library dependencies and related deployment issues; simply compile the simple zip archive unzipper into your application, and you are ready to go.
The library supports zip-files with no compression, and zip-files compressed with the Deflate algorithm. This includes zip-files generated by the Windows Zip Shell extension (Send To -> Compressed (zipped) folder), zip-files generated by WinZip (with default compression settings at least), and zip-files generated by the Info-Zip tools.
Background
Internally, the library only handles some simple parsing of the zip file headers. All the gory details of actually decompressing the data is left to the built-in System.IO.Compression.DeflateStream
. As this class is available beginning with .NET 2.0, the library compiles and runs on the .NET 2.0, 3.0, and 3.5 platforms.
Using the code
The library contains just one class, SimpleUnZipper
, with a few static methods. To unzip a file on disk to a directory on disk, simply use the UnZipTo
method:
// Unzip archive to disk
SimpleUnZipper.UnZipTo(@"c:\zipfile.zip", @"c:\foo\bar");
This will unzip the files in 'c:\zipfile.zip' and place them in the 'c:\foo\bar' folder, creating a sub-folder structure on disk matching that of the zip-file.
The UnZipTo
method also accepts a Stream
as input:
// Unzip from stream to disk
using (var stream = File.OpenRead(@"c:\zipfile.zip"))
{
SimpleUnZipper.UnZipTo(stream, @"c:\foo\bar");
}
To get the raw decompressed data from a zip file, use the UnZip
methods:
// Unzip archive manually
foreach (var file in SimpleUnZipper.UnZip(@"c:\zipfile.zip"))
{
Console.WriteLine(file.Name);
// Do something with file.Stream here...
}
The UnZip
methods return an IEnumerable<UncompressedFile>
, where each UncompressedFile
has a Name
property (the file name) and a Stream
property (the decompressed file data). Note that an UncompressedFile
might be a directory, in which case, the Name
is a directory and the Stream
has a length of zero.