I often find myself forced to zip or unzip files if not for the sake of compression then just for bundling files together.
There are actually quite a few libraries for zipping out there but they do exists. One example is SharpZip which I´ve started using, it’s lightweight and simple.
When using this library I once found myself in the need to compress an entire file structure which unfortunately wasn’t so easy. I tried to add entries in the following manner
zipFile.Add("c:MyFoldermyFilename.txt");
But this gives us the following zip structure, notice the folder and file being on the same level.
myZip.zip
-> MyFolder
-> myFilename.txt
I tried to use the zipFile.Add(string filename, string entryName) but this
screwed up my file.
After looking about the source code for a while I found the FastZip.Create method using the NameConverter
to trim the basefolder from the filenames. To avoid having to hack into the library simply use this code instead:
zipFile.EntryFactory.NameTransform = new ZipNameTransform(directory); zipFile.Add("c:MyFoldermyFilename.txt");
Which´ll give you:
myZip.zip
-> myFilename.txt
There you go!