أخبار

 

تسجيل الدخول

أهلا, زائر. الرجاء الدخول أو التسجيل
أêنèن 07, 2008, 10:36:16
اسم المستخدم: كلمة المرور:
تسجيل الدخول باسم المستخدم، كلمة المرور و مدة الجلسة

هل نسيت كلمة المرور؟

الإحصائيات

Members: 694
News: 194
Web Links: 3

مواضيع ذات صلة

آخر 10 أعضاء

mohloay
عذراء
feto
lord_s_man
mohamedhassan2008
found
sky_blue
الحجري
manchsteralex2000
eliventurr

إعلانات

Google
 
عالم الفيجوال بيسك دوت نت منتديات عالم الفيجوال بيسك دوت نت
جووجل
Compress/Decompress Files Print E-mail
User Rating: / 1
PoorBest 
دروس برمجة - الملفات و المجلدات
Written by أيوب جمال الإدريسي   
انثناثاء, 27 حزêراو 2006

الموضوع مترجم بتصرف من موقع www.developpez.com  

مقدمة :

      في النسخ السابقة للفيجوال بيسك دوت نت لم يكن بالامكان عمل برنامج لضغط الملفات و فك ضغطها دون المرور عبر ادوات خارجية الشئ الذي كان،رغم تنفيذه للأمر، يشكل عقبة امامنا و غير عملي لكن الآن مع الفيجوال بيسك 2005 هناك امكانية لعمل هذا الشئ بكل بساطة كون مايكروسفت قامت بادخال كلاسات تمكننا من فك و ضغط الملفات  و هذا ما سنراه في درسنا البسيط هذا.

ضغط الملفات :

    اولا و قبل كل شئ يجب ان نقوم باستيراد namespaces  التالية :

Imports System.IO

Imports System.IO.Compression

نقوم بتكوين واجهة للبرنامج على الشكل التالي :

 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

Comments (3)
RSS comments
1. Written by زائر on 29-06-2006 01:13 - Guest
 
 
بارك الله فيك
جهد رائع
 
2. Written by زائر on 03-07-2006 09:10 - Guest
 
 
بارك الله فيك
شكرا لك اخي الكريم 
لاكن لو اردنا ان يكون البرنامج داعم كم صيغة من اختيارنا مثلا rar,zip لفك ضغط ملفاتهم هل يمكننا عمل ذالك
 
3. Written by Crazy Man on 03-07-2006 09:27 - Guest
 
 
لا يمكن على حد علمي
حقيقة على حد علمي لا يمكن ذلك لأن الكلاس المتوفر في ال FrameWork 2 يتعامل مع تشفير خاص به و لا يمكنه التعامل مع تشفير ملفات اخرى مثل تلك المشفرة بال WinRar ...
 

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

Last Updated ( انثناثاء, 27 حزêراو 2006 )
 
< Prev   Next >
Advertisement

جميع حقوق الطبع محفوطة لموقع عالم الفيجوال بيسك دوت نت


hit counter