Compressing and decompressing files with BZip2 in .NET C#
January 28, 2015 6 Comments
BZip2 is yet another data compression algorithm, similar to GZip and Deflate. There’s no native support for BZip2 (de)compression in .NET but there’s a NuGet package provided by icsharpcode.net.
You’ll need to import the following NuGet package to use BZip2:
You can compress a file as follows:
FileInfo fileToBeZipped = new FileInfo(@"c:\bzip2\logfile.txt"); FileInfo zipFileName = new FileInfo(string.Concat(fileToBeZipped.FullName, ".bz2")); using (FileStream fileToBeZippedAsStream = fileToBeZipped.OpenRead()) { using (FileStream zipTargetAsStream = zipFileName.Create()) { try { BZip2.Compress(fileToBeZippedAsStream, zipTargetAsStream, true, 4096); } catch (Exception ex) { Console.WriteLine(ex.Message); } } }
…and this is how you can decompress the resulting bz2 file again:
using (FileStream fileToDecompressAsStream = zipFileName.OpenRead()) { string decompressedFileName = @"c:\bzip2\decompressed.txt"; using (FileStream decompressedStream = File.Create(decompressedFileName)) { try { BZip2.Decompress(fileToDecompressAsStream, decompressedStream, true); } catch (Exception ex) { Console.WriteLine(ex.Message); } } }
Read all posts dedicated to file I/O here.
Reblogged this on iReadable.
Usually I never lever comments around code samples on the web, but OH MY GOD this was hard to find a proper example on. Thanks a ton! Cheers from Denmark!
You’re welcome!
//Andras
Hi Andras,
Using this function, I get a weird behaviour. All files extracted are truncated to max size of 900k. Do you have an idea why?Thanks
Hi viorel,
Did you figure this out? I think I’m running into the same issue.
I found the reason here: https://github.com/adamhathcock/sharpcompress/issues/166
When a BZip2 file consists of several concatenated streams as described in https://en.wikipedia.org/wiki/Bzip2#File_format, SharpZipLib only decompresses the first one. I haven’t found a way to prevent this behavior, so I’m either using another library or splitting the streams using the BZip2 format specification myself.