Have you ever encountered a scenario when you have to download a few files zipped and compressed? Few developments 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.

Once downloaded, it's 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 is created on the fly (a PDF using Rotativa) is saved in the 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); 
    bw.Write(resultSet); 
    bw.Close(); 


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. Let's look at the code snippet for zipping.
using(ZipFile zipFile = new ZipFile()) { 
    //Get all filepath from folder 
    String[] files = Directory.GetFiles(Server.MapPath("/")); 
    string fileUniqueName = "Template" 
    foreach(string file in files) { 
        if (file.Contains(fileUniqueName.ToString())) { 
            zipFile.AddFile(file, @ "TemplateDocs_" + DateTime.Now); 
            //Adding files from filepath into Zip 
        } 
    } 
    Response.ClearContent(); 
    Response.ClearHeaders(); 
    //Set zip file name 
    Response.AppendHeader("content-disposition", "attachment; filename=TemplatedDocuments.zip"); 
    zipFile.CompressionMethod = CompressionMethod.BZip2; 
    zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression; 
    //Save the zip content in output stream 
    zipFile.Save(outputStream); 

//Set the cursor to start position 
outputStream.Position = 0; 
String[] filesToDelete = Directory.GetFiles(Server.MapPath("/")); 
foreach(string file in filesToDelete) { 
    if (file.Contains(fileUniqueName.ToString())) { 
        FileInfo fi = new FileInfo(file); 
        fi.Delete(); 
    } 

return new FileStreamResult(outputStream, fileType); 

The above snippet is just required to start zipping and compressing the files. As you can see using block for the ZipFile is created with instantiation of its object.

Then, the files present under the path are navigated using Server.MapPath(""), Once the path is set, the files if with some unique string character in the filename needs to be searched and only zipped, is set to a variable.

Then each file is looped through and added to the ZipFile object, here zipFile.AddFiles(file, ZippedFolderName); ZipFolderName here is the name you set for the folder having all the files after extraction.

There are three compression levels for the ZipFile an enum which describes through code as below,
// 
// Summary: 
// The method of compression to use for a particular ZipEntry. 
// 
// Remarks: 
// http://www.pkware.com/documents/casestudies/APPNOTE.TXT describes a number of 
// distinct cmopression methods that can be used within a zip file. DotNetZip supports 
// a subset of them. 
public enum CompressionMethod { 
    // 
    // Summary: 
    // No compression at all. For COM environments, the value is 0 (zero). 
    None = 0, 
        // 
        // Summary: 
        // DEFLATE compression, as described in http://www.ietf.org/rfc/rfc1951.txt. This 
        // is the "normal" compression used in zip files. For COM environments, the value 
        // is 8. 
        Deflate = 8, 
        // 
        // Summary: 
        // BZip2 compression, a compression algorithm developed by Julian Seward. For COM 
        // environments, the value is 12. 
        BZip2 = 12 


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.

HostForLIFE.eu ASP.NET Core 2.2.1 Hosting
European best, cheap and reliable ASP.NET hosting with instant activation. HostForLIFE.eu is #1 Recommended Windows and ASP.NET hosting in European Continent. With 99.99% Uptime Guaranteed of Relibility, Stability and Performace. HostForLIFE.eu security team is constantly monitoring the entire network for unusual behaviour. We deliver hosting solution including Shared hosting, Cloud hosting, Reseller hosting, Dedicated Servers, and IT as Service for companies of all size.