|
الموضوع مترجم بتصرف من موقع www.developpez.com مقدمة : في النسخ السابقة للفيجوال بيسك دوت نت لم يكن بالامكان عمل برنامج لضغط الملفات و فك ضغطها دون المرور عبر ادوات خارجية الشئ الذي كان،رغم تنفيذه للأمر، يشكل عقبة امامنا و غير عملي لكن الآن مع الفيجوال بيسك 2005 هناك امكانية لعمل هذا الشئ بكل بساطة كون مايكروسفت قامت بادخال كلاسات تمكننا من فك و ضغط الملفات و هذا ما سنراه في درسنا البسيط هذا. ضغط الملفات : اولا و قبل كل شئ يجب ان نقوم باستيراد namespaces التالية : Imports System.IO Imports System.IO.Compression
نقوم بتكوين واجهة للبرنامج على الشكل التالي :  بعد ذلك نقوم بكتابة الكود التالي في الزر Go الخاص بال Compression : ------------------------------------------------------------------------------------------------------------------------------------ Try 'وضع محتوى الملف الذي نريد ضغطه في متغير من نوع FileStream Dim SourceFile As New FileStream(Me.TextBox1.Text, FileMode.Open) 'نحدد متغير يساوي حجم الملف Dim MyBuffer(SourceFile.Length) As Byte 'نقرأ الملف و نضع محتواه في المتغير MyBuffer SourceFile.Read(MyBuffer, 0, CInt(MyBuffer.Length)) 'نقوم باغلاق الملف SourceFile.Close() 'انشاء ملف الذي سيحتوي الملف المضغوط Dim DestinationFile As New FileStream(Me.TextBox2.Text, FileMode.Create) 'هنا ننشأ الكائن من نوع GZipStream 'و هو الذي سيمكننا من ضغط الملف و يأخذ كبرامتر الملف الذي سنضغط فيه و طريقة الضغط يعني هل سنضغط ام نفك الضغط ' و طبعا هنا سوف نقوم بالضغط Dim CompressionObject As New GZipStream(DestinationFile, CompressionMode.Compress) 'نكتب المحتوي المضغوط في الملف عبر تمرير المتغير MyBuffer 'و الذي يحتوي على محتوي الملف الغير مضغوط CompressionObject.Write(MyBuffer, 0, MyBuffer.Length) 'اغلاق الكائن CompressionObject CompressionObject.Close() Catch ex As Exception MsgBox(ex.Message) End Try ------------------------------------------------------------------------------------------------------------------------------------
فك ضغط الملفات : من اجل فك ضغط اي ملف اكتب الكود التالي : ------------------------------------------------------------------------------------------------------------------------------------ Try 'وضع محتوى الملف الذي نريد ضغطه في متغير من نوع FileStream Dim SourceFile As New FileStream(Me.TextBox3.Text, FileMode.Open) 'هنا ننشأ الكائن من نوع GZipStream 'و هو الذي سيمكننا من ضغط الملف و يأخذ كبرامتر الملف الذي نريد فط ضغطه و طريقة الضغط يعني هل سنضغط ام نفك الضغط ' و طبعا هنا سوف نقوم بفك الضغط Dim DecompressionObject As New GZipStream(SourceFile, CompressionMode.Decompress) 'جدول نضع فيه حجم الملف بال Octet Dim SizeOctet(3) As Byte ' Dim position As Integer = CInt(SourceFile.Length - 4) SourceFile.Position = position 'قراءة حجم الملف SourceFile.Read(SizeOctet, 0, 4) SourceFile.Position = 0 'تحويل الحجم من الى Integer Dim SizeFile As Integer = BitConverter.ToInt32(SizeOctet, 0) 'تحديد حجم ال Buffer Dim buffer(SizeFile + 100) As Byte
Dim myOffset As Integer = 0
While True 'يتم فك ظغط ال Octets 'ووضعها في المتغير DecompressedOctets Dim DecompressedOctets As Integer = DecompressionObject.Read(buffer, myOffset, 100) 'اذا لم يعد هناك Octets 'من اجل فط ظغطها نخرج من الحلفة If DecompressedOctets = 0 Then Exit While End If 'اعادة تغيير حجم ال myOffset 'حتى لا نبدأ من الصفر مرة و نواصل عملية فك الضغط myOffset += DecompressedOctets
End While 'انشاء الملف الذي سيحتوي على المعلومات المفكوكة الضغط Dim DestinatinationFile As New FileStream(Me.TextBox4.Text, FileMode.Create) 'كتابة المعلومات المفكوكة الضغط في الملف DestinatinationFile.Write(buffer, 0, SizeFile) 'افراغ ال Bufffers DestinatinationFile.Flush() 'اغلاق الكائن DecompressionObject.Close()
Catch ex As Exception MsgBox(ex.Message) End Try --------------------------------------------------------------------------------------------------------------------------------- هذا كل ما في الأمر اذا كانت هناك اية ملاحظات فالمرجو طرحها و السلام عليكم و رحمة الله و بركاته Add as favourites (56) | Quote this article on your site | Views: 2735 | E-mail
Only registered users can write comments. Please login or register. Powered by AkoComment Tweaked Special Edition v.1.4.6 AkoComment © Copyright 2004 by Arthur Konze - www.mamboportal.com All right reserved |