تقييم الموضوع :
  • 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
}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Video [درس فيديو] تقارير الكريستال ريبورت وتغيير مسار الصور أثناء التشغيل رمضان272 0 1,607 28-03-22, 03:18 AM
آخر رد: رمضان272
  معالجة التنبيهات في البرامج (استقبال تنبيهات داخل البرنامج) Dev Express ابو ليلى 9 9,267 10-02-22, 09:55 PM
آخر رد: عبدالحميد حسني
  تنفيذ سكربت القاعدة مع انطلاق البرنامج + تحديث التعديلات على القاعدة ابو ليلى 2 5,063 02-07-21, 09:05 PM
آخر رد: naserflaha71
  إضافة نغمات إفتتاحيّة أثناء تسطيب البرنامج عبد العزيز البسكري 11 7,249 23-01-19, 08:35 PM
آخر رد: عبد العزيز البسكري
  قاعدة بيانات مضمنة مع البرنامج viv 4 4,185 27-09-18, 08:01 PM
آخر رد: viv
  [درس فيديو] شرح ربط البرنامج بقاعدة بيانات, إدراج حذف تعديل جلب البيانات ( بدون أن تكتب سطر واحد) عبدالله الدوسري 4 6,449 08-02-18, 12:55 AM
آخر رد: Ameer Eagle
  [درس فيديو] تشغيل اوامر Run من البرنامج & مثال غلق الويندوز بعد وقت محدد باستخدام VB.net أحمد النجار 1 3,854 23-12-15, 04:26 AM
آخر رد: الماجيك مسعد
  [كود] عمل DragDrop من البرنامج الى Windows explorer HASAN6.0 5 3,852 02-12-15, 04:04 PM
آخر رد: hamada558
  [VB.NET] تحريك الادوات بالماوس وقت التشغيل Ahmed_online 4 3,417 26-11-15, 02:28 PM
آخر رد: eldmasy11
Brick [مثال] السحب والافلات على ايقونه البرنامج اكثر من مره والافلات على النافذه الطالب 0 2,335 15-08-15, 09:58 PM
آخر رد: الطالب

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


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