هذا درس لمعرفة كيفية إضافة عدة ملفات إلى ملف واحد وإستخراجها في 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 نقوم بالكتابة
وهنا ينتهي الدرس وأنا جاهز لأي شيئ وقد وضعت مثال في المرفقات