03-10-15, 06:57 PM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
أشكر الاخ "أباعمر" على المثال (ردا على استفسار احد الاخوة)
فأحببت تجربة الملف "Ionic.Zip.dll" بمشروع مستقل .. وها هو مرفق.
ملاحظة لا جديد أبدا وانما حب مشاركة.
تنبيه(تختلف نتيجة الاستخراج او توليد ملف من حيث المكان Path فاذكر بطريقة الكود التي استخدمتها يكون المكان في المحرك الرئيسي للنظام اما الان يكون بجوار الملف التنفيذي) هذا اذا لم اخطيء
وهذا كلاس الفورم
السلام عليكم ورحمة الله وبركاته
أشكر الاخ "أباعمر" على المثال (ردا على استفسار احد الاخوة)
فأحببت تجربة الملف "Ionic.Zip.dll" بمشروع مستقل .. وها هو مرفق.
ملاحظة لا جديد أبدا وانما حب مشاركة.
تنبيه(تختلف نتيجة الاستخراج او توليد ملف من حيث المكان Path فاذكر بطريقة الكود التي استخدمتها يكون المكان في المحرك الرئيسي للنظام اما الان يكون بجوار الملف التنفيذي) هذا اذا لم اخطيء
وهذا كلاس الفورم
PHP كود :
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
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
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
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
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)
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