Imports System.ComponentModel
Imports System.IO
Imports Ionic.Zip
Public Class Form1
Dim lst As New List(Of String)
Dim ofd As OpenFileDialog
Dim sfd As SaveFileDialog
Dim zip_pass As String = ""
Private Sub p(ByVal i As Integer)
If ProgressBar1.InvokeRequired Then
ProgressBar1.Invoke(New Action(Of Integer)(AddressOf p), i)
Else
ProgressBar1.Value = i
End If
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
zip_pass = InputBox("أكتب كلمة مرور لقفل الملف")
lst.Clear()
ofd = New OpenFileDialog
ofd.Multiselect = True
If ofd.ShowDialog = DialogResult.OK Then
lst.AddRange(ofd.FileNames)
End If
If lst.Count > 0 Then
Button1.Enabled = False
Button2.Enabled = False
ProgressBar1.Maximum = lst.Count - 1
If b1.IsBusy = False Then b1.RunWorkerAsync()
End If
End Sub
Dim zip As ZipFile
Private Sub b1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles b1.DoWork
zip = New ZipFile
zip.Password = zip_pass
For a = 0 To lst.Count - 1
b1.ReportProgress(a)
zip.AddFile(lst(a), "")
Next
End Sub
Private Sub b1_ProgressChanged(sender As Object, e As ProgressChangedEventArgs) Handles b1.ProgressChanged
p(e.ProgressPercentage)
End Sub
Private Sub b1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles b1.RunWorkerCompleted
If zip.Count > 0 Then
zip.Save(IO.Path.GetFileNameWithoutExtension(lst(lst.Count - 1)) & ".zip")
End If
Button1.Enabled = True
Button2.Enabled = True
End Sub
Dim zipfilename As String = ""
Private Sub smax(ByVal i As Integer)
If ProgressBar1.InvokeRequired Then
ProgressBar1.Invoke(New Action(Of Integer)(AddressOf smax), i)
Else
ProgressBar1.Maximum = i
End If
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
zip_pass = InputBox("أكتب كلمة مرور لالغاء قفل الملف")
ofd = New OpenFileDialog
ofd.Filter = "Zip Files(*.zip)|*.zip"
If ofd.ShowDialog = DialogResult.OK Then
zipfilename = ofd.FileName
Button2.Enabled = False
Button1.Enabled = False
If b2.IsBusy = False Then b2.RunWorkerAsync()
End If
End Sub
Dim zip2 As ZipFile
Private Sub b2_DoWork(sender As Object, e As DoWorkEventArgs) Handles b2.DoWork
zip2 = ZipFile.Read(zipfilename)
zip2.Password = zip_pass
smax((zip2.Count) - 1)
Dim m As Integer = 0
For Each en As ZipEntry In zip2
b2.ReportProgress(m)
en.Extract()
m += 1
Next
End Sub
Private Sub b2_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles b2.RunWorkerCompleted
Button2.Enabled = True
Button1.Enabled = True
End Sub
Private Sub b2_ProgressChanged(sender As Object, e As ProgressChangedEventArgs) Handles b2.ProgressChanged
p(e.ProgressPercentage)
End Sub
End Class