123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- Imports System
- Imports System.IO
- Imports Ionic.Zip
- Imports System.ComponentModel
- Public Class Form1
- Private _backgroundWorker1 As System.ComponentModel.BackgroundWorker
- Private _operationCanceled As Boolean
- Private nFilesCompleted As Integer
- Private totalEntriesToProcess As Integer
- Private _appCuKey As Microsoft.Win32.RegistryKey
- Private AppRegyPath As String = "Software\Ionic\VBunZip"
- Private rvn_ZipFile As String = "zipfile"
- Private rvn_ExtractDir As String = "extractdir"
- Private Delegate Sub ZipProgress(ByVal e As ExtractProgressEventArgs)
- Private Sub btnZipBrowse_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnZipBrowse.Click
- Dim openFileDialog1 As New OpenFileDialog
- If (String.IsNullOrEmpty(tbZipToOpen.Text)) Then
- openFileDialog1.InitialDirectory = "c:\"
- Else
- openFileDialog1.InitialDirectory = IIf(File.Exists(Me.tbZipToOpen.Text), Path.GetDirectoryName(Me.tbZipToOpen.Text), Me.tbZipToOpen.Text)
- End If
- openFileDialog1.Filter = "zip files|*.zip|EXE files|*.exe|All Files|*.*"
- openFileDialog1.FilterIndex = 1
- openFileDialog1.RestoreDirectory = True
- If (openFileDialog1.ShowDialog = DialogResult.OK) Then
- Me.tbZipToOpen.Text = openFileDialog1.FileName
- If File.Exists(Me.tbZipToOpen.Text) Then
- Me.btnUnzip_Click(sender, e)
- End If
- End If
- End Sub
- Private Sub btnUnzip_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnUnzip.Click
- If Not File.Exists(Me.tbZipToOpen.Text) Then
- MessageBox.Show("That file does not exist", "Cannot Unzip", MessageBoxButtons.OK)
- End If
- If Not String.IsNullOrEmpty(tbZipToOpen.Text) And _
- Not String.IsNullOrEmpty(tbExtractDir.Text) Then
- If Not Directory.Exists(tbExtractDir.Text) Then
- Directory.CreateDirectory(tbExtractDir.Text)
- End If
- nFilesCompleted = 0
- _operationCanceled = False
- btnCancel.Enabled = True
- btnUnzip.Enabled = False
- btnZipBrowse.Enabled = False
- btnExtractDirBrowse.Enabled = False
- tbZipToOpen.Enabled = False
- tbExtractDir.Enabled = False
- KickoffExtract()
- End If
- End Sub
- Private Sub KickoffExtract()
- lblStatus.Text = "Extracting..."
- Dim args(2) As String
- args(0) = tbZipToOpen.Text
- args(1) = tbExtractDir.Text
- _backgroundWorker1 = New System.ComponentModel.BackgroundWorker()
- _backgroundWorker1.WorkerSupportsCancellation = False
- _backgroundWorker1.WorkerReportsProgress = False
- AddHandler Me._backgroundWorker1.DoWork, New DoWorkEventHandler(AddressOf Me.UnzipFile)
- _backgroundWorker1.RunWorkerAsync(args)
- End Sub
- Private Sub btnExtractDirBrowse_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnExtractDirBrowse.Click
- Dim dlg As New FolderBrowserDialog
- dlg.Description = "Select a folder to zip up:"
- dlg.ShowNewFolderButton = False
- 'dlg.ShowEditBox = True
- dlg.SelectedPath = Me.tbExtractDir.Text
- 'dlg.ShowFullPathInEditBox = True
- If (dlg.ShowDialog = DialogResult.OK) Then
- tbExtractDir.Text = dlg.SelectedPath
- End If
- End Sub
- Private Sub UnzipFile(ByVal sender As Object, ByVal e As DoWorkEventArgs)
- Dim extractCancelled As Boolean = False
- Dim args() As String = e.Argument
- Dim zipToRead As String = args(0)
- Dim extractDir As String = args(1)
- Try
- Using zip As ZipFile = ZipFile.Read(zipToRead)
- totalEntriesToProcess = zip.Entries.Count
- SetProgressBarMax(zip.Entries.Count)
- AddHandler zip.ExtractProgress, New EventHandler(Of ExtractProgressEventArgs)(AddressOf Me.zip_ExtractProgress)
- zip.ExtractAll(extractDir, Ionic.Zip.ExtractExistingFileAction.OverwriteSilently)
- End Using
- Catch ex1 As Exception
- MessageBox.Show(String.Format("There's been a problem extracting that zip file. {0}", ex1.Message), "Error Extracting", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1)
- End Try
- ResetUI()
- End Sub
-
- Private Sub ResetUI()
- If btnCancel.InvokeRequired Then
- btnCancel.Invoke(New Action(AddressOf ResetUI), New Object() {})
- Else
- btnUnzip.Enabled = True
- btnZipBrowse.Enabled = True
- btnExtractDirBrowse.Enabled = True
- btnCancel.Enabled = False
- tbZipToOpen.Enabled = True
- tbExtractDir.Enabled = True
- ProgressBar1.Maximum = 1
- ProgressBar1.Value = 0
- Me.btnUnzip.Focus()
- End If
- End Sub
- Private Sub SetProgressBarMax(ByVal n As Integer)
- If ProgressBar1.InvokeRequired Then
- ProgressBar1.Invoke(New Action(Of Integer)(AddressOf SetProgressBarMax), New Object() {n})
- Else
- ProgressBar1.Value = 0
- ProgressBar1.Maximum = n
- ProgressBar1.Step = 1
- End If
- End Sub
-
- Private Sub zip_ExtractProgress(ByVal sender As Object, ByVal e As ExtractProgressEventArgs)
- If _operationCanceled Then
- e.Cancel = True
- Return
- End If
-
- If (e.EventType = Ionic.Zip.ZipProgressEventType.Extracting_AfterExtractEntry) Then
- StepEntryProgress(e)
- ElseIf (e.EventType = ZipProgressEventType.Extracting_BeforeExtractAll) Then
- '' do nothing
- End If
- End Sub
- Private Sub StepEntryProgress(ByVal e As ExtractProgressEventArgs)
- If ProgressBar1.InvokeRequired Then
- ProgressBar1.Invoke(New ZipProgress(AddressOf StepEntryProgress), New Object() {e})
- Else
- ProgressBar1.PerformStep()
- System.Threading.Thread.Sleep(100)
- 'set a label with status information
- nFilesCompleted = nFilesCompleted + 1
- lblStatus.Text = String.Format("{0} of {1} files...({2})", nFilesCompleted, totalEntriesToProcess, e.CurrentEntry.FileName)
- Me.Update()
- End If
- End Sub
- 'Private Sub StepArchiveProgress(ByVal e As ZipProgressEventArgs)
- ' If ProgressBar1.InvokeRequired Then
- ' ProgressBar1.Invoke(New ZipProgress(AddressOf StepArchiveProgress), New Object() {e})
- ' ElseIf Not _operationCanceled Then
- ' _nFilesCompleted = _nFilesCompleted + 1
- ' ProgressBar1.PerformStep()
- ' progressBar2.Value = progressBar2.Maximum = 1
- ' MyBase.Update()
- ' End If
- 'End Sub
- Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click
- _operationCanceled = True
- ProgressBar1.Maximum = 1
- ProgressBar1.Value = 0
- lblStatus.Text = "Cancelled..."
- End Sub
- Private Sub SaveFormToRegistry()
- If AppCuKey IsNot Nothing Then
- If Not String.IsNullOrEmpty(tbZipToOpen.Text) Then
- AppCuKey.SetValue(rvn_ZipFile, Me.tbZipToOpen.Text)
- End If
- If Not String.IsNullOrEmpty(tbExtractDir.Text) Then
- AppCuKey.SetValue(rvn_ExtractDir, tbExtractDir.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.tbZipToOpen.Text = s
- End If
- s = AppCuKey.GetValue(rvn_ExtractDir)
- If Not String.IsNullOrEmpty(s) Then
- tbExtractDir.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
|