Create normal zip file programmatically
You can now use the ZipArchive class (System.IO.Compression.ZipArchive), available from .NET 4.5
You have to add System.IO.Compression
as a reference.
Example: Generating a zip of PDF files
using (var fileStream = new FileStream(@"C:\temp\temp.zip", FileMode.CreateNew))
{
using (var archive = new ZipArchive(fileStream, ZipArchiveMode.Create, true))
{
foreach (var creditNumber in creditNumbers)
{
var pdfBytes = GeneratePdf(creditNumber);
var fileName = "credit_" + creditNumber + ".pdf";
var zipArchiveEntry = archive.CreateEntry(fileName, CompressionLevel.Fastest);
using (var zipStream = zipArchiveEntry.Open())
zipStream.Write(pdfBytes, 0, pdfBytes.Length);
}
}
}
}
My 2 cents:
using (ZipArchive archive = ZipFile.Open(zFile, ZipArchiveMode.Create))
{
foreach (var fPath in filePaths)
{
archive.CreateEntryFromFile(fPath,Path.GetFileName(fPath));
}
}
So Zip files could be created directly from files/dirs.
Just an update on this for anyone else who stumbles across this question.
Starting in .NET 4.5 you are able to compress a directory using System.IO.Compression
into a zip file. You have to add System.IO.Compression.FileSystem
as a reference as it is not referenced by default. Then you can write:
System.IO.Compression.ZipFile.CreateFromDirectory(dirPath, zipFile);
The only potential problem is that this assembly is not available for Windows Store Apps.