الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

درس لتعليم كيفية دمج عدة ملفات في ملف حاضن

مغلق
بدأه MiCcSoft في 16 سبتمبر 2006 · 3 رد · 2,453 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هذا درس لمعرفة كيفية إضافة عدة ملفات إلى ملف واحد وإستخراجها في vb.net 2005

أولا - سنعتمد على طريقة الكتابة العشوائية للملف الحاضن أي كيف ؟

سنقوم بإنشاء أنواع جديدة هي Structure نستيطع كتابتها إلى أي ملف عشوائيا

وسنبدأ ب FileEx

   Public Structure FileEx
		Dim FileName As String
		Dim FileDir As String
		Dim FileFolder As String
		Dim File() As Byte
	End Structure

هنا قمنا بصنع نوع جديدا وهو FileEx وهو سيحتوي على معلومات الملف الذي سنضعه في الملف الحاضن حيث

FileName هو أسم الملف ويجب أن يكون الأسم فقط من دون المسار أي F.arb

FileDir و FileFolder خاصان في المجلد الذي سيوضع فيه الملف

File وهو من النوع Byte() وهو الملف

النوع INFO وهو خاص بمعلومات الملف

 Public Structure Info
		Dim FilesCount As Integer
		Dim Password As String
	End Structure

FilesCount هو عدد الملفات في الأرشيف وليس مهم جدا

Password وهي إذا أردت وضع كلمة سر للأرشيف

النوع AllFileS وهو هام جدا

	Public Structure AllFileS
		Dim Files() As FileEx
		Dim Inf As Info
	End Structure

وسيحتوي على مصفوفات الملفات

Files() وهو مصفوفات من الملفات من النوع FileEx

Inf وهو يحتوي معلومات الأرشيف

والأن دالة لكتابة النوع AllFiles إلى ملف عشوائي

	Public Sub CreateFile(ByVal Files As AllFileS, ByVal FilePath As String)
		Dim i As Int16 = FreeFile()
		FileOpen(i, FilePath, OpenMode.Binary, OpenAccess.ReadWrite)
		FilePut(1, Files)
		FileClose(i)
	End Sub

الأن لقد قمنا بجتهيز الأنواع الأن كيف نستخدمها ؟

هذا مثال :

	Public Sub CreateArchive(ByVal filename As String)
	 1  Dim Fil As New FileEx
	 2   Dim Fils(FileList.Items.Count) As FileEx
	 3   Dim AllFiles As New AllFileS
	 4   Prog.Maximum = FileList.Items.Count
	 5   Dim i As Integer
	 6   Dim o As Integer
	 7   For i = 1 To FileList.Items.Count
	 8	   o = i - 1
	 9	   Fil.FileName = IO.Path.GetFileName(FileList.Items.Item(o))
	 10	   Fil.FileDir = IO.Path.GetDirectoryName(FileList.Items.Item(o))
	 11	   Fil.File = My.Computer.FileSystem.ReadAllBytes(FileList.Items.Item(o))
	 12	   Fil.FileFolder = IO.Path.GetFileName(FileList.Items.Item(o))
	 13	   Fils(o) = Fil
	 14	  Prog.Value = i
	 15  Next
	 16 Dim Inf As New Info
	 17  Inf.FilesCount = FileList.Items.Count
	 18   AllFiles.Files = Fils
	 19   AllFiles.Inf = Inf
	 20   CreateFile(AllFiles, filename)
	End Sub

لقد قمنا بصنع دالة جديدة هي CreateArchive مختصة بتمرير بارمتر هو FileName وهو مسار الملف الذي سيتم الكتابة إليه

ويجب أن يوجد دخال الفورم أداة Listbox أسمها FileList وعلى ProgressPar أسمها Prog

شرح الكود في السطر الأول :

قمنا يتعريف متغير من النوع FileEx مهمتها جمع معلومات عن الملف

السطر الثاني قمنا بتعريف مصفوفة من النوع FileEx استيعابها من الملفات هو عدد الملفات المدخلة داخل ListBox

السطر الثالث هو تعريف متغير من النوع AllFileS لنقوم بكتابته إلى الملف بعد تهيئته

السطر الرابع لتحديد أكبر قيمه داخل Prog

الأسطر من 5 إلى 8 و 15 نقوم بتعريف متغيرات عددية ونقوم بعمل عملية تكرار For لأخذ أسماء الملفات المدخلة داخل ListBox المسماه FileList

الأسطر 9 و 10و 11و 12 نقوم بتهيئة المتغير Fil بمعومات الملف المحدد أنتبه إلى السطر 11 نقوم بقراءة بايتات الملف أي الملف

السطر 13 نقوم بتهيئة المصوفة Fils

السطر 16 نعرف متغير جديدا وهو Inf وهو من النوع Info وفي السطر 17 نقوم بتهيئته وطبعا هنا لا نقوم بوضع كلمة سر

السطر 18 و 19 نقوم بتهيئه المتغير AllFiles ليصبح جاهز للكتابة

السطر 20 نقوم بإستخدام الدالة CreateFile لكتابة AllFiles إلى ملف

والأن أصبح لدينا ملف جديدا يحتوي على الملفات التي قمت بتحديدها طبعا هنا لم نقم بضغط الملفات

الأن لقد أصبحت طريقو كتابة الملفات جاهزة لكن كيف نستخرجها ؟! الطريقة

هي :

	Public Sub ExtractE(ByVal filename As String, ByVal ExDir As String)
	  1 Dim Fil As New FileEx
	  2 Dim AllFil As New AllFileS
	  3 Dim FrFile As Integer = FreeFile()
	  4 FileOpen(FrFile, filename, OpenMode.Binary)
	  5 FileGet(FrFile, AllFil)
	  6 FileClose(FrFile)
	  7 Dim inf As Info = AllFil.Inf
	  8 ExProg.Maximum = inf.FilesCount
	  9 Dim i As Integer
	  10 For i = 1 To AllFil.Files.Length
	  11	On Error Resume Next
	  12	Fil = AllFil.Files(i - 1)
	  13	Dim D As String = ExDir & "\" & IO.Path.GetFileName(Fil.FileDir)
	  14	IO.Directory.CreateDirectory(D)
	  15	Dim FileNa As String = D & "\" & Fil.FileName
	  16	My.Computer.FileSystem.WriteAllBytes(FileNa, Fil.File, False)
	  17  ExProg.Value = i - 1
	  18 next
	End Sub

السطر الأول والثاني نعرف متغيران من النوع FileEx و AllFileS

الأسطر 3 و 4و 5 و 6 نقوم بفتح الأرشيف المحدد وتقوم بملئ المتغير AllFil

الأن أصبح لدينا مصفوفة FileEx تحتوي على معلومات الملفات وبعدها نقوم بعمل حلقة تكرار لتهئية المتغير Fil يجميع قيم AllFil

ثم نقوم بتجهيز أسم الملف لكتابة عليه وفي السطر 16 نقوم بالكتابة

وهنا ينتهي الدرس وأنا جاهز لأي شيئ وقد وضعت مثال في المرفقات

WinArb.zip

#2

عمل قوي جزاك الله كل خير

ولكن ارجو النظر في موضوع مساحة الملف الناتج

2 ملف كانوا =50 بيت

بعد العد الدمج =260 بيت

هذا للتحسين

ولكن هو عمل قوي ويساعد في حفظ البيانات والملفات من الحذف

تم تعديل هذه المشاركة بواسطة KARIMSOFT في 17 سبتمبر 2006 في 01:23

#3

أخي هذا للملفات الصغيرة فقط لكن جرب لما فوق 5 KB أو MB

#4

فهمت قصدك شكرا للرد

هذا الموضوع مغلق.

مواضيع مشابهة