Here is a shared/static function (provided in Visual Basic and C#) that will add a single file into a ZIP file using SharpZipLib. Portions of this code originated from StackExchange, I melded what I saw into a single function.
VB.Net
''' <summary>
''' Adds a single file to a ZIP library using SharpZipLib
''' </summary>
''' <param name="zipFile">The path to the zip file you want to add a file to.</param>
''' <param name="fileToAdd">The path to the file you want to add to the zip.</param>
''' <param name="compressionLevel">The compression level to use from 0 to 10</param>
Public Shared Sub AddFileToZip(zipFile As String, fileToAdd As String, compressionLevel As Integer)
Using zipStream As New ICSharpCode.SharpZipLib.Zip.ZipOutputStream(File.Create(zipFile))
zipStream.SetLevel(compressionLevel)
Dim buffer As Byte() = New Byte(4095) {}
Dim entry As New ICSharpCode.SharpZipLib.Zip.ZipEntry(System.IO.Path.GetFileName(fileToAdd))
entry.DateTime = DateTime.Now
zipStream.PutNextEntry(entry)
Using fs As FileStream = File.OpenRead(fileToAdd)
Dim sourceBytes As Integer
Do
sourceBytes = fs.Read(buffer, 0, buffer.Length)
zipStream.Write(buffer, 0, sourceBytes)
Loop While sourceBytes > 0
End Using
zipStream.Finish() : zipStream.Close() : zipStream.Dispose()
End Using
End Sub
C#
/// <summary>
/// Adds a single file to a ZIP library using SharpZipLib
/// </summary>
/// <param name="zipFile">The path to the zip file you want to add a file to.</param>
/// <param name="fileToAdd">The path to the file you want to add to the zip.</param>
/// <param name="compressionLevel">The compression level to use from 0 to 10</param>
/// <remarks></remarks>
public static void AddFileToZip(string zipFile, string fileToAdd, int compressionLevel)
{
using (ICSharpCode.SharpZipLib.Zip.ZipOutputStream zipStream = new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(File.Create(zipFile)))
{
zipStream.SetLevel(compressionLevel);
byte[] buffer = new byte[4096];
ICSharpCode.SharpZipLib.Zip.ZipEntry entry = new ICSharpCode.SharpZipLib.Zip.ZipEntry(System.IO.Path.GetFileName(fileToAdd));
entry.DateTime = DateTime.Now;
zipStream.PutNextEntry(entry);
using (FileStream fs = File.OpenRead(fileToAdd))
{
int sourceBytes = 0;
do
{
sourceBytes = fs.Read(buffer, 0, buffer.Length);
zipStream.Write(buffer, 0, sourceBytes);
}
while (sourceBytes > 0);
}
zipStream.Finish();
zipStream.Close();
zipStream.Dispose();
}
}