C# Corner
Tech
News
Videos
Forums
Jobs
Books
Events
More
Interviews
Live
Learn
Training
Career
Members
Blogs
Challenges
Certification
Contribute
Article
Blog
Video
Ebook
Interview Question
Collapse
Feed
Dashboard
Wallet
Learn
Achievements
Network
Refer
Rewards
SharpGPT
Premium
Contribute
Article
Blog
Video
Ebook
Interview Question
Register
Login
How To Create And Download Zipped Files In .NET
WhatsApp
Suraj Sahoo
4y
104.6k
0
10
100
Article
Introduction
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
the DotNetZip
package used to zip, unzip & compress files using C#, VB.NET, & any .NET language.
Practicality
Download the DotNetzip package from the NuGet package.
Download
from here.
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.
Conclusion
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.
.NET
Download Zipped Files In .NET
Zipped Files
Up Next
Ebook Download
View all
.NET Interview Questions and Answer: Practical Implementation
Read by 42k people
Download Now!
Learn
View all
Invincix Solutions Private limited
Every INVINCIAN will keep their feet grounded, to ensure, your head is in the cloud
Membership not found