بسم الله الرحمن الرحيم
-----------------------------
عندي فكرة لكن لا اعرف كيفية تطبيقها ساقولها واريد شخص ان يطبق الاكواد (اتمنا ان اكون ضيف خفيف عليكم )
-------------------------------------
نبدء بالفكرة اولا اريد عند الضغط علي "زر ما في البرنامج" يقوم البرنامج بفتح اداة SaveFileDingol
ويختار البرنامج اسم الملف وليكن Test وستكون الصيغة dll
عند الضغط علي حفظ يقوم البرنامج بضغط كافة الملفات التي في هذا الرابط "H:\" مثلا
ويضعها في شكل dll في المكان الذي اختاره الشخص
------------------------------------
وهناك زرار اخر فيه
اداة
LiodFileDingol
وفيها المستخدم يختار الملف الذي تم حفظه من قبل بعد الاختيار
يقوم البرنامج بحذف كافة الملفات المخفية والموجود التي في هذا المسار"H:\"
ويقوم بفك الضغط "DLL" واسترجاع الملفات كما كانت من قبل
لا يصلح تحويل مجموعة من الملفات المختلفة و التي لها صفات مختلفة الي ملف Dll لأن ملفات Dll ملفات لها صفة خاصة مثلها مثل اي ملف أخر
لكن الصحيح هو أن تقرأ كل ملف علي حده و تقوم بتحويله الي مصفوفة من البايت و أيضا يجب أن تحدد نوع الملف من امتداد الملف مثلا
ثم تتم عملية الحفظ للملفات علي هيئة مصفوفة
لكنك يجب ان تحدد FileHeader الخاصة بكل ملف تحفظه و هذا ممكن كتابته علي هيئة كلاس أو Structure و تكون مكوناته عبارة عن اسم الملف و امتداده أو نوعيته لأن هذه المعلومات سوف تساعدك لاحقا علي إعادة كل ملف الي صيغته الأصلية
اوكي اخي لا نحولها اريد ضغطها في ملف rar بنفس الطريقة التي قلتها فوق
اتوقع ان عبد الرحمن يريد نوع من الخداع في لاحقة الملف بينما يبقى النسق الخاص بالملف هو rar او zip
الفكرة حلوة و لكن يبقى السؤال ما هو اصدار FrameWork الذي تعمل عليه
ساحاول بها و لكن على الاصدارة 4.5
اعمل فورم لديك و اضف له كما في الصورة المرفقة
الان تابع معي عبر الاكواد
استورد المراجع التالية
PHP كود :
Imports System.IO
Imports System.IO.Compression
و كذلك استورد المرجع System.IO.Compression.FileSystem الى قائمة المراجع في Solution Explorer و ليس في محرر الكود
عرف المتغير التالي في اعلى الفورم
سنعمل على وظيفة مشتركة يتسخدمها اكثر من زر و هي تعود بمسار المجلد المحدد
PHP كود :
Private Function GetOpenFolder(sender As Object) As String
Dim Ofd As New FolderBrowserDialog
With Ofd
.SelectedPath = Environment.SpecialFolder.Recent
.Description = "Select the source directory"
If .ShowDialog = DialogResult.OK Then
Dim btn As Button = DirectCast(sender, Button)
If btn.Name = "FolderPath" Then
FolderName = System.IO.Path.GetFileName(Ofd.SelectedPath)
End If
Return .SelectedPath
End If
End With
Return ""
End Function
الان الى اكود الازرار
PHP كود :
Private Sub FolderPath_Click(sender As Object, e As EventArgs) Handles FolderPath.Click
TextBox1.Text = GetOpenFolder(FolderPath)
End Sub
PHP كود :
Private Sub BtnSave_Click(sender As Object, e As EventArgs) Handles BtnSave.Click
If FolderName <> "" Then
TextBox2.Text = GetOpenFolder(BtnSave) & "\" & FolderName & ".dll"
End If
End Sub
الاجراء اسفل الكود
PHP كود :
Private Sub BtnCompress_Click(sender As Object, e As EventArgs) Handles BtnCompress.Click
CompressionFolder()
End Sub
PHP كود :
Private Sub CompressionFolder()
Try
Dim startPath As String = TextBox1.Text
Dim zipPath As String = TextBox2.Text
ZipFile.CreateFromDirectory(startPath, zipPath)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
PHP كود :
Private Sub Btn_selcompress_Click(sender As Object, e As EventArgs) Handles Btn_selcompress.Click
SelectZipFile()
End Sub
PHP كود :
Private Sub SelectZipFile()
Dim openFileDialog1 As OpenFileDialog = New OpenFileDialog
openFileDialog1.Filter = "Dll Files (*.dll)|*.dll"
openFileDialog1.FilterIndex = 1
openFileDialog1.RestoreDirectory = True
Dim UserClickedOK As Boolean = openFileDialog1.ShowDialog
If (UserClickedOK = True) Then
FolderName = System.IO.Path.GetFileName(openFileDialog1.FileName)
FolderName = FolderName.Substring(0, FolderName.Length - 4)
TextBox3.Text = openFileDialog1.FileName
End If
End Sub
PHP كود :
Private Sub Btn_ExFold_Click(sender As Object, e As EventArgs) Handles Btn_ExFold.Click
TextBox4.Text = GetOpenFolder(Btn_ExFold) & "\" & FolderName
End Sub
PHP كود :
Private Sub Btn_Exctract_Click(sender As Object, e As EventArgs) Handles Btn_Exctract.Click
'معالجة عملية الحذف
If CheckBox1.CheckState = CheckState.Checked Then
DeleteFilesFromFolder(TextBox4.Text)
End If
ExTractZipFile()
End Sub
PHP كود :
Sub DeleteFilesFromFolder(Folder As String)
If Directory.Exists(Folder) Then
For Each _file As String In Directory.GetFiles(Folder)
System.IO.File.Delete(_file)
Next
For Each _folder As String In Directory.GetDirectories(Folder)
DeleteFilesFromFolder(_folder)
Next
End If
End Sub
PHP كود :
Private Sub ExTractZipFile()
Try
Dim ZipFilePath As String = TextBox3.Text
Dim ExtactPath As String = TextBox4.Text
ZipFile.ExtractToDirectory(ZipFilePath, ExtactPath)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
الطريقة تعمل وفق ما طلبت تقوم بضغط مجلد بكل ما يحتويه الى المكان المحدد و اعطائه اللاحقة Dll , و اعادة الفك في المسار المحدد مع امكانية الحذف
بالتوفيق اخي
ممكن تطبقها في مشروع بي نت فريم وارك 3.5
هناك مشكلة هنا بالتحديد ZipFile.CreateFromDirectory(startPath, zipPath)
ZipFile
المرجع متوفر ابتداءاً من الاصدار 4.5 فقط
ياخواني ما اريده التالي ارجوكم انتبوه جيدا انا عندي برنامج فيه 2 زرار عند الضغط علي زر الحفظ فيه يقوم بعمل ضغط لجميع الملفات التي في المسار الموجود في تيكست بوكس 1 ويفتح نافذه SaveFileDingol ليختار المستخدم مكان الحفظ
اما عند الاسترجاع اولا يقوم البرنامج بحذف جميع متحويات الملف من ثم يقوم البرنامج بفتح نافذه LoadFileDingol منها يختار المستخدم الملف المحفوظ مسبقا وعند التحديد يقوم البرنامج بفك الضغط عن الملفات ويسترجعها الي المسار المحدد في التيكست بوكس 1