FrmZip.designer.vb
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Partial Class FrmZip Inherits System.Windows.Forms.Form 'Form overrides dispose to clean up the component list. <System.Diagnostics.DebuggerNonUserCode()> _ Protected Overrides Sub Dispose(ByVal disposing As Boolean) Try If disposing AndAlso components IsNot Nothing Then components.Dispose() End If Finally MyBase.Dispose(disposing) End Try End Sub 'Required by the Windows Form Designer Private components As System.ComponentModel.IContainer 'NOTE: The following procedure is required by the Windows Form Designer 'It can be modified using the Windows Form Designer. 'Do not modify it using the code editor. <System.Diagnostics.DebuggerStepThrough()> _ Private Sub InitializeComponent() Me.Label1 = New System.Windows.Forms.Label Me.Label2 = New System.Windows.Forms.Label Me.tbDirToZip = New System.Windows.Forms.TextBox Me.tbZipToCreate = New System.Windows.Forms.TextBox Me.btnDirBrowse = New System.Windows.Forms.Button Me.btnZipUp = New System.Windows.Forms.Button Me.ProgressBar1 = New System.Windows.Forms.ProgressBar Me.ProgressBar2 = New System.Windows.Forms.ProgressBar Me.lblStatus = New System.Windows.Forms.Label Me.btnCancel = New System.Windows.Forms.Button Me.SuspendLayout() ' 'Label1 ' Me.Label1.AutoSize = True Me.Label1.Location = New System.Drawing.Point(11, 13) Me.Label1.Name = "Label1" Me.Label1.Size = New System.Drawing.Size(78, 13) Me.Label1.TabIndex = 0 Me.Label1.Text = "directory to zip:" ' 'Label2 ' Me.Label2.AutoSize = True Me.Label2.Location = New System.Drawing.Point(11, 39) Me.Label2.Name = "Label2" Me.Label2.Size = New System.Drawing.Size(84, 13) Me.Label2.TabIndex = 1 Me.Label2.Text = "zip file to create:" ' 'tbDirToZip ' Me.tbDirToZip.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.tbDirToZip.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest Me.tbDirToZip.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystemDirectories Me.tbDirToZip.Location = New System.Drawing.Point(107, 9) Me.tbDirToZip.Name = "tbDirToZip" Me.tbDirToZip.Size = New System.Drawing.Size(327, 20) Me.tbDirToZip.TabIndex = 2 ' 'tbZipToCreate ' Me.tbZipToCreate.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.tbZipToCreate.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest Me.tbZipToCreate.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem Me.tbZipToCreate.Location = New System.Drawing.Point(106, 35) Me.tbZipToCreate.Name = "tbZipToCreate" Me.tbZipToCreate.Size = New System.Drawing.Size(327, 20) Me.tbZipToCreate.TabIndex = 6 ' 'btnDirBrowse ' Me.btnDirBrowse.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.btnDirBrowse.Location = New System.Drawing.Point(440, 10) Me.btnDirBrowse.Name = "btnDirBrowse" Me.btnDirBrowse.Size = New System.Drawing.Size(32, 19) Me.btnDirBrowse.TabIndex = 4 Me.btnDirBrowse.Text = "..." Me.btnDirBrowse.UseVisualStyleBackColor = True ' 'btnZipUp ' Me.btnZipUp.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.btnZipUp.Location = New System.Drawing.Point(377, 72) Me.btnZipUp.Name = "btnZipUp" Me.btnZipUp.Size = New System.Drawing.Size(94, 23) Me.btnZipUp.TabIndex = 0 Me.btnZipUp.Text = "Zip It!" Me.btnZipUp.UseVisualStyleBackColor = True ' 'ProgressBar1 ' Me.ProgressBar1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.ProgressBar1.Location = New System.Drawing.Point(12, 105) Me.ProgressBar1.Name = "ProgressBar1" Me.ProgressBar1.Size = New System.Drawing.Size(459, 13) Me.ProgressBar1.TabIndex = 6 ' 'ProgressBar2 ' Me.ProgressBar2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.ProgressBar2.Location = New System.Drawing.Point(13, 124) Me.ProgressBar2.Name = "ProgressBar2" Me.ProgressBar2.Size = New System.Drawing.Size(459, 13) Me.ProgressBar2.TabIndex = 7 ' 'lblStatus ' Me.lblStatus.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.lblStatus.AutoSize = True Me.lblStatus.Location = New System.Drawing.Point(11, 148) Me.lblStatus.Name = "lblStatus" Me.lblStatus.Size = New System.Drawing.Size(16, 13) Me.lblStatus.TabIndex = 8 Me.lblStatus.Text = "..." ' 'btnCancel ' Me.btnCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.btnCancel.Enabled = False Me.btnCancel.Location = New System.Drawing.Point(277, 72) Me.btnCancel.Name = "btnCancel" Me.btnCancel.Size = New System.Drawing.Size(94, 23) Me.btnCancel.TabIndex = 8 Me.btnCancel.Text = "Cancel" Me.btnCancel.UseVisualStyleBackColor = True ' 'Form1 ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(484, 172) Me.Controls.Add(Me.btnCancel) Me.Controls.Add(Me.lblStatus) Me.Controls.Add(Me.ProgressBar2) Me.Controls.Add(Me.ProgressBar1) Me.Controls.Add(Me.btnZipUp) Me.Controls.Add(Me.btnDirBrowse) Me.Controls.Add(Me.tbZipToCreate) Me.Controls.Add(Me.tbDirToZip) Me.Controls.Add(Me.Label2) Me.Controls.Add(Me.Label1) Me.MinimumSize = New System.Drawing.Size(500, 208) Me.Name = "Form1" Me.Text = "DotNetZip WinForms VB Zip Creator" Me.ResumeLayout(False) Me.PerformLayout() End Sub Friend WithEvents Label1 As System.Windows.Forms.Label Friend WithEvents Label2 As System.Windows.Forms.Label Friend WithEvents tbDirToZip As System.Windows.Forms.TextBox Friend WithEvents tbZipToCreate As System.Windows.Forms.TextBox Friend WithEvents btnDirBrowse As System.Windows.Forms.Button Friend WithEvents btnZipUp As System.Windows.Forms.Button Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar Friend WithEvents ProgressBar2 As System.Windows.Forms.ProgressBar Friend WithEvents lblStatus As System.Windows.Forms.Label Friend WithEvents btnCancel As System.Windows.Forms.Button End Class
FrmZip.vb
Imports System.IO Imports Ionic.Zip Imports System.Threading Imports System.ComponentModel Public Class FrmZip Private _backgroundWorker1 As System.ComponentModel.BackgroundWorker Private _saveCanceled As Boolean Private _totalBytesAfterCompress As Long Private _totalBytesBeforeCompress As Long Private _nFilesCompleted As Integer Private _progress2MaxFactor As Integer Private _entriesToZip As Integer Private _appCuKey As Microsoft.Win32.RegistryKey 'Private AppRegyPath As String = "Software\Ionic\VBzipUp" Private rvn_ZipFile As String = "zipfile" Private rvn_DirToZip As String = "dirToZip" ' Delegates for invocation of UI from other threads Private Delegate Sub SaveEntryProgress(ByVal e As SaveProgressEventArgs) Private Delegate Sub ButtonClick(ByVal sender As Object, ByVal e As EventArgs) Private Sub btnDirBrowse_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnDirBrowse.Click Dim folderName As String = Me.tbDirToZip.Text Dim dlg1 As New FolderBrowserDialog dlg1.SelectedPath = IIf(Directory.Exists(folderName), folderName, "c:\") dlg1.ShowNewFolderButton = False If (dlg1.ShowDialog = DialogResult.OK) Then 'Me._folderName = dlg1.get_SelectedPath Me.tbDirToZip.Text = folderName End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnZipUp.Click Me.KickoffZipup() End Sub Private Sub KickoffZipup() Dim folderName As String = Me.tbDirToZip.Text If (((Not folderName Is Nothing) AndAlso (folderName <> "")) AndAlso ((Not Me.tbZipToCreate.Text Is Nothing) AndAlso (Me.tbZipToCreate.Text <> ""))) Then If File.Exists(Me.tbZipToCreate.Text) Then If (MessageBox.Show(String.Format("The file you have specified ({0}) already exists. Do you want to overwrite this file?", _ Me.tbZipToCreate.Text), "Confirmation is Required", _ MessageBoxButtons.YesNo, MessageBoxIcon.Question) <> DialogResult.Yes) Then Return End If File.Delete(Me.tbZipToCreate.Text) End If Me._saveCanceled = False Me._nFilesCompleted = 0 Me._totalBytesAfterCompress = 0 Me._totalBytesBeforeCompress = 0 Me.btnZipUp.Enabled = False Me.btnZipUp.Text = "Zipping..." Me.btnCancel.Enabled = True Me.lblStatus.Text = "Zipping..." Dim options As New WorkerOptions options.ZipName = Me.tbZipToCreate.Text options.Folder = folderName _backgroundWorker1 = New System.ComponentModel.BackgroundWorker() _backgroundWorker1.WorkerSupportsCancellation = False _backgroundWorker1.WorkerReportsProgress = False AddHandler Me._backgroundWorker1.DoWork, New DoWorkEventHandler(AddressOf Me.DoSave) _backgroundWorker1.RunWorkerAsync(options) End If End Sub Private Sub DoSave(ByVal sender As Object, ByVal e As DoWorkEventArgs) Dim options As WorkerOptions = e.Argument 'Try Using zip1 As ZipFile = New ZipFile zip1.AddDirectory(options.Folder) Me._entriesToZip = zip1.EntryFileNames.Count ' Me.SetProgressBars() AddHandler zip1.SaveProgress, New EventHandler(Of SaveProgressEventArgs)(AddressOf Me.zip1_SaveProgress) zip1.Save(options.ZipName) End Using 'Catch exc1 As Exception ' MessageBox.Show(String.Format("Exception while zipping: {0}", exc1.Message)) ' Me.btnCancel_Click(Nothing, Nothing) 'End Try End Sub Private Sub zip1_SaveProgress(ByVal sender As Object, ByVal e As SaveProgressEventArgs) If Me._saveCanceled Then e.Cancel = True Return End If Select Case e.EventType Case ZipProgressEventType.Saving_AfterWriteEntry 'Me.StepArchiveProgress(e) Exit Select Case ZipProgressEventType.Saving_Completed Me.SaveCompleted() Exit Select Case ZipProgressEventType.Saving_EntryBytesRead ' Me.StepEntryProgress(e) Exit Select End Select End Sub ' Private Sub StepArchiveProgress(ByVal e As SaveProgressEventArgs) ' If Me.progressBar1.InvokeRequired Then ' Me.progressBar1.Invoke(New SaveEntryProgress(AddressOf Me.StepArchiveProgress), New Object() {e}) ' ElseIf Not Me._saveCanceled Then ' Me._nFilesCompleted += 1 ' Me.progressBar1.PerformStep() ' Me._totalBytesAfterCompress = (Me._totalBytesAfterCompress + e.CurrentEntry.CompressedSize) ' Me._totalBytesBeforeCompress = (Me._totalBytesBeforeCompress + e.CurrentEntry.UncompressedSize) ' ' progressBar2 is the one dealing with the item being added to the archive ' ' if we got this event, then the add of that item (or file) is complete, so we ' ' update the progressBar2 appropriately. ' Me.progressBar2.Value = Me.progressBar2.Maximum = 1 ' MyBase.Update() ' End If ' End Sub Private Sub SaveCompleted() If Me.lblStatus.InvokeRequired Then Me.lblStatus.Invoke(New MethodInvoker(AddressOf SaveCompleted)) 'Me.lblStatus.Invoke(New MethodInvoker(Me, DirectCast(Me.SaveCompleted, IntPtr))) Else Me.lblStatus.Text = String.Format("Done, Compressed {0} files, {1:N0}% of original", Me._nFilesCompleted, ((100 * Me._totalBytesAfterCompress) / CDbl(Me._totalBytesBeforeCompress))) Me.ResetState() End If End Sub ' Private Sub StepEntryProgress(ByVal e As SaveProgressEventArgs) ' If Me.progressBar2.InvokeRequired Then ' Me.progressBar2.Invoke(New SaveEntryProgress(AddressOf Me.StepEntryProgress), New Object() {e}) ' ElseIf Not Me._saveCanceled Then ' If (Me.progressBar2.Maximum = 1) Then ' Dim entryMax As Long = e.TotalBytesToTransfer ' Dim absoluteMax As Long = &H7FFFFFFF ' Me._progress2MaxFactor = 0 ' Do While (entryMax > absoluteMax) ' entryMax = (entryMax / 2) ' Me._progress2MaxFactor += 1 ' Loop ' If (CInt(entryMax) < 0) Then ' entryMax = (entryMax * -1) ' End If ' Me.progressBar2.Maximum = CInt(entryMax) ' Me.lblStatus.Text = String.Format("{0} of {1} files...({2})", (Me._nFilesCompleted + 1), Me._entriesToZip, e.CurrentEntry.FileName) ' End If ' Dim xferred As Integer = CInt((e.BytesTransferred >> Me._progress2MaxFactor)) ' Me.progressBar2.Value = IIf((xferred >= Me.progressBar2.Maximum), Me.progressBar2.Maximum, xferred) ' MyBase.Update() ' End If ' End Sub Private Sub ResetState() Me.btnCancel.Enabled = False Me.btnZipUp.Enabled = True Me.btnZipUp.Text = "Zip it!" Me.progressBar1.Value = 0 Me.progressBar2.Value = 0 Me.Cursor = Cursors.Default End Sub ' Private Sub SetProgressBars() ' If Me.ProgressBar1.InvokeRequired Then ' 'Me.ProgressBar1.Invoke(New MethodInvoker(Me, DirectCast(Me.SetProgressBars, IntPtr))) ' Me.ProgressBar1.Invoke(New MethodInvoker(AddressOf SetProgressBars)) ' Else ' Me.ProgressBar1.Value = 0 ' Me.ProgressBar1.Maximum = Me._entriesToZip ' Me.ProgressBar1.Minimum = 0 ' Me.ProgressBar1.Step = 1 ' Me.ProgressBar2.Value = 0 ' Me.ProgressBar2.Minimum = 0 ' Me.ProgressBar2.Maximum = 1 ' Me.ProgressBar2.Step = 2 ' End If ' End Sub ' Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click ' If Me.lblStatus.InvokeRequired Then ' Me.lblStatus.Invoke(New ButtonClick(AddressOf Me.btnCancel_Click), New Object() {sender, e}) ' Else ' Me._saveCanceled = True ' Me.lblStatus.Text = "Canceled..." ' Me.ResetState() ' End If ' End Sub ' Private Sub SaveFormToRegistry() ' If AppCuKey IsNot Nothing Then ' If Not String.IsNullOrEmpty(tbZipToCreate.Text) Then ' AppCuKey.SetValue(rvn_ZipFile, Me.tbZipToCreate.Text) ' End If ' If Not String.IsNullOrEmpty(tbDirToZip.Text) Then ' AppCuKey.SetValue(rvn_DirToZip, tbDirToZip.Text) ' End If ' End If ' End Sub ' Private Sub LoadFormFromRegistry() ' If AppCuKey IsNot Nothing Then ' Dim s As String ' s = AppCuKey.GetValue(rvn_ZipFile) ' If Not String.IsNullOrEmpty(s) Then ' Me.tbZipToCreate.Text = s ' End If ' s = AppCuKey.GetValue(rvn_DirToZip) ' If Not String.IsNullOrEmpty(s) Then ' tbDirToZip.Text = s ' End If ' End If ' End Sub ' Public ReadOnly Property AppCuKey() As Microsoft.Win32.RegistryKey ' Get ' If (_appCuKey Is Nothing) Then ' Me._appCuKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(AppRegyPath, True) ' If (Me._appCuKey Is Nothing) Then ' Me._appCuKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(AppRegyPath) ' End If ' End If ' Return _appCuKey ' End Get ' End Property ' Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing ' SaveFormToRegistry() ' End Sub ' Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' LoadFormFromRegistry() ' End Sub End Class Public Class WorkerOptions ' Fields 'Public Comment As String 'Public CompressionLevel As CompressionLevel 'Public Encoding As String 'Public Encryption As EncryptionAlgorithm Public Folder As String 'Public Password As String 'Public Zip64 As Zip64Option 'Public ZipFlavor As Integer Public ZipName As String End Class