03-10-12, 08:13 AM
كاتب الموضوع : 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 أو ... استخدم مخيلتك