تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
تخزين ملف ما ضمن Exe البرنامج أثناء التطوير واستعادته أثناء التشغيل
#1
كاتب الموضوع : samerselo

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

كود :
Imports System.Reflection
Imports System.IO
وهذا هو كود الاستعادة مدعما بالتعليقات الكاملة التي تشرح كيفية عمله

كود :
' إجراء الغرض منه استخراج أي مصدر ثنائي مضمن ضمن الملف التنفيذي للمشروع
' وتخزينه في ملف
Private Sub ExtractBinaryResource(ByVal ToStoreFileName As String, ByVal EmResourceName As String)
' استخدام حلقة اصطياد الأخطاء
Try
' احضار اسم المجمع الحالي
Dim Ref As Assembly = Assembly.GetExecutingAssembly
' انشاء stream يتضمن المصدر الثنائي الموجود في المجمع
Dim ResStr As Stream = Ref.GetManifestResourceStream(Ref.GetName.Name & "." & EmResourceName)

' إنشاء مصفوفة بايتات لتحمل البيانات الثنائية
' وبطول البياناات التي ستتم قراءتها
Dim TmBuff(ResStr.Length - 1) As Byte
' قراءة البيانات الثنائية من الـ Stream
' إلى مصفوفة البايتات
ResStr.Read(TmBuff, 0, ResStr.Length)

' إنشاء FileStream يستخدم لتخزين محتويات المصفوفة المؤقتة إلى القرص
Using Fs As New FileStream(ToStoreFileName, FileMode.Create)
' إنشاء كاتب بيانات ثنائية يعتمد على FileStream
Using Bw As New BinaryWriter(Fs)
' كتابة مصفوفة البياتات للقرص
Bw.Write(TmBuff)
' كتابة جميع البيانات للقرص وتفريغ مخازن الذاكرة المؤقتة
Bw.Flush()
End Using
End Using

Catch ex As Exception
' إظهار رسالة بالخطأ في حال حدوثه
MsgBox(ex.Message)
End Try
End Sub
والإجراءات الصحيحة لتخزين الملف أثناء التطوير حتى لانواجه مشاكل أثناء التنفيذ

1- انسخ الملف الذي تريد استخدامه لمجلد المشروع مباشرة إياك ونسخه لداخل المجلد Bin كما يفعل الكثير - ولاتضف أي ملفات Resource لاداعي لها
2- في الـ Solution Explorer انقر بالماوس اليميني على المشروع ثم اختر Add/Existing Item وأضف الملف الذي تريده للمشروع
3 - غير خاصية Build Action للملف المضاف إلى Embedded Resource


ملاحظة: قيمة المتغير EmResourceName حساسة لحالة الأحرف أي عندما تمرر اسم المصدر الثنائي - ملف أكسيس مثلا - يجب أن تطابق حالة الأحرف الممررة هنا لحالة الأحرف المكتوب بها الاسم عند تخزين الملف أي تأكد من مطابقة حالة الأحرف بالضبط لاسم الملف كما يظهر بعد إضافته في الخطوة رقم 2

ملاحظة: هذا الكود يعمل مع الكثير من الملفات مثلا ملف MDB أو PDF أو JPG أو BIN أو DAT أو ... استخدم مخيلتك
}}}}
تم الشكر بواسطة:
#2
كما يمكننا تطوير كود الاستعادة بعدة أشكال حسب الحاجة فمثلا يمكننا تعديل الإجراء لينقل الملف إلى MemoryStream عوضا عن Filestream وبهذا يخزن في ذاكرة مؤقتة بحيث يمكن استخدامه ويكون الإجراء المعدل ليعيد memorystream كما يلي

كود :
Private Sub ExBinResToMemoryStream(ByVal EmResourceName As String, _
ByRef RetMemStr As MemoryStream)

Try
Dim Ref As Assembly = Assembly.GetExecutingAssembly
Dim ResStr As Stream = Ref.GetManifestResourceStream(Ref.GetName.Name & "." & EmResourceName)

Dim TmBuff(ResStr.Length - 1) As Byte
ResStr.Read(TmBuff, 0, ResStr.Length)
RetMemStr = New MemoryStream(ResStr.Length)
RetMemStr.Write(TmBuff, 0, ResStr.Length)

Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub


فإذا افترضنا أن الملف هو صورة باسم Pic0.jpg مثلا وأردنا تحميلها في مربع الصور نستخدم الكود التالي

كود :
Dim Ms As MemoryStream
ExBinResToMemoryStream("Pic0.jpg", Ms)
Me.PictureBox1.Image = New Bitmap(Ms)
Ms.Close()
Ms.Dispose()
وهذا مثال عن استخدام الكود الأول الذي يستعيد إلى ملف على القرص

كود :
' فتح صندوق حوار فتح
If Me.SFD.ShowDialog = Windows.Forms.DialogResult.OK Then
' استدعاء الإجراء وتمرير اسم الملف واسم المصدر الثنائي
ExtractBinaryResource(Me.SFD.FileName, "test.mdb")
' عرض رسالة بعد الانتهاء
MsgBox("Ok")
End If
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [درس فيديو] تشغيل اوامر Run من البرنامج & مثال غلق الويندوز بعد وقت محدد باستخدام VB.net أحمد النجار 1 543 23-12-15, 04:26 AM
آخر رد: الماجيك مسعد
  [كود] عمل DragDrop من البرنامج الى Windows explorer HASAN6.0 5 367 02-12-15, 04:04 PM
آخر رد: hamada558
  [VB.NET] تحريك الادوات بالماوس وقت التشغيل Ahmed_online 4 894 26-11-15, 02:28 PM
آخر رد: eldmasy11
Brick [مثال] السحب والافلات على ايقونه البرنامج اكثر من مره والافلات على النافذه الطالب 0 366 15-08-15, 09:58 PM
آخر رد: الطالب
  فيديو بالعربي انشاء جملة الاتصال اثناء تشغيل البرنامج أحمد النجار 0 393 13-06-15, 09:40 AM
آخر رد: أحمد النجار
  معلومة :: علامة - أثناء تعريف المتغير :: RaggiTech 0 258 06-10-12, 07:52 PM
آخر رد: RaggiTech
  نبضه 2 - التشغيل العشوائي لملفات صوتيه RaggiTech 0 338 05-10-12, 04:14 AM
آخر رد: RaggiTech
  طرق حماية البرنامج من الاستنساخ RaggiTech 3 723 05-10-12, 03:45 AM
آخر رد: RaggiTech
  لماذا يأخذ كودك وقتا طويلا أثناء التنفيذ RaggiTech 0 308 05-10-12, 01:43 AM
آخر رد: RaggiTech
  تعلم أضافة الأدوات على الفورم وقت التشغيل وإضافة أحداث الضغط وما شايه لها RaggiTech 0 429 03-10-12, 09:29 AM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم