Have you ever encountered a scenario when you have to download few files zipped and compressed! Few development involving the manipulation of documents and its management would require this. There are a lot of packages out in the market. Here in this article, I would be sharing the use of DotNetZip package used to zip, unzip & compress files using C#, VB.Net & any .NET language.
Download the DotNetzip package from Nuget package.
Once downloaded, its all set to use the dotnetzip package to start zipping the files and compressing them. For the files to be zipped, here I will be using the file path and select each file to be zipped. Here also we will see how a file being created on the fly (a pdf using rotativa) is saved in same folder and zipped.
File created on the fly using Rotativa
var pdfResult = new Rotativa.PartialViewAsPdf("~/Template.cshtml", model) //This is HTML that would be generated as PDF
FileName = "Template.pdf"
var resultSet = pdfResult.BuildPdf(ControllerContext);
if (resultSet != null)
string path = Path.Combine(Server.MapPath(subPath));
FileStream fs = new FileStream(path+".pdf", FileMode.Create, FileAccess.ReadWrite);
BinaryWriter bw = new BinaryWriter(fs);
The above code snippet is generating a PDF using a cshtml Razor view page using Rotativa Using Rotativa Best to follow the mentioned article for more information to generate PDF using Rotativa using MVC.
Lets look at the code snippet for the Zipping.
using (ZipFile zipFile = new ZipFile())
//Get all filepath from folder
String files = Directory.GetFiles(Server.MapPath("/"));
string fileUniqueName = "Template"
memoRefCode = memoRefCode.Replace('/', '_');
foreach (string file in files)
zipFile.AddFile(file, @"MemoDocs_"+ memoRefCode); //Adding files from filepath into Zip
//Set zip file name
Response.AppendHeader("content-disposition", "attachment; filename=MemoDocuments.zip");
zipFile.CompressionMethod = CompressionMethod.BZip2;
zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
//Save the zip content in output stream
//Set the cursor to start position
outputStream.Position = 0;
String filesToDelete = Directory.GetFiles(Server.MapPath("/"));
foreach (string file in filesToDelete)
FileInfo fi = new FileInfo(file);
//Dispance the stream
return new FileStreamResult(outputStream, fileType);
The above are the three algorithms used. I personally have used only BZip2 based on few good reviews.
Once compressed and all files inserted into the folder, the zipped folder is ready to be downloaded using the FileStreamResult in MVC action.
This is the simple explanation and the code snippet for the Zip file concept. This is simple and really handy to be used and it also provides the compression algorithms which are good to go with.