تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيفية قراءة ملف باستخدام IntPtr الخاص بالملف
#4
الكلاسات بعد التعديل عليها قليلا
الكلاسات مكتوبة باستخدام الفيحوال استوديو 2015
استخدامهم مع نسخ قديمة قد يؤدي الي خطأ في الكود


PHP كود :
Public Class CairoDataFile

    Private _data 
As Byte()
 
   Private _cairo As String
    Public Sub 
New(ptr As IntPtr)
 
       Dim func As Func(Of IntPtrString) = Function(pSystem.Runtime.InteropServices.Marshal.PtrToStringUni(p)
 
       _cairo = If(Nothingfunc(ptr))
 
       Me._data = (If(Not String.IsNullOrEmpty(_cairo), (New Lazy(Of Byte())(Function() IO.File.ReadAllBytes(_cairo))).Value, (New Lazy(Of Byte())(Function() New Byte() {})).Value))
 
   End Sub

    Public ReadOnly Property ToText 
As String
        Get
            Return _cairo
        End Get
    End Property

    Public ReadOnly Property ToBytes 
As Byte()
 
       Get
            Return Me
._data
        End Get
    End Property

    Public ReadOnly Property ToStream 
As IO.MemoryStream
        Get
            Return 
New IO.MemoryStream(ToBytes())
 
       End Get
    End Property

End 
Class 

PHP كود :
Public Class CairoIntPtr
    Inherits MarshalByRefObject
    Implements IDisposable

    Private _disposed 
As Boolean
    Private _handle 
As IntPtr

    Public Sub 
New(As String)
 
       Dim func As Func(Of StringIntPtr) = Function(str)
 
                                                 Dim ptr As IntPtr CType(NothingIntPtr)
 
                                                 ptr System.Runtime.InteropServices.Marshal.StringToHGlobalUni(str)
 
                                                 Return ptr
                                              End 
Function
 
       Dim zero As Func(Of IntPtr) = Function() IntPtr.Zero
        _handle 
= If(Not String.IsNullOrEmpty(s), func(s), zero)
 
   End Sub

    Public ReadOnly Property Handle
() As Integer
        Get
            Return Me
._handle
        End Get
    End Property

    Public ReadOnly Property ToInt32 
As Int32
        Get
            Return Convert
.ToInt32(Me.Handle)
 
       End Get
    End Property

    Public ReadOnly Property ToInt64 
As Int64
        Get
            Return Convert
.ToInt64(Me.Handle)
 
       End Get
    End Property

    Private Sub DisposeInternal
()
 
       If Me._handle <> 0 Then
            Dim action 
As Action(Of IntPtr) = Sub(ptr As IntPtr)
 
                                                 System.Runtime.InteropServices.Marshal.FreeHGlobal(ptr)
 
                                             End Sub
            action
(_handle)
 
           Me._handle 0
        End 
If
 
   End Sub

    Protected Overridable Sub Dispose
(disposing As Boolean)
 
       If _disposed Then
            Return
        End 
If

 
       If disposing Then
            Me
.DisposeInternal()
 
       End If

 
       _disposed True
    End Sub

    Public Overrides 
Function Equals(obj As Object) As Boolean
        Return obj IsNot Nothing AndAlso obj
.[GetType]() Is MyBase.[GetType]() AndAlso (CType(objCairoIntPtr))._handle Me.Handle
    End 
Function

 
   Public Overrides Function GetHashCode() As Integer
        Return Me
._handle.GetHashCode()
 
   End Function

 
   Protected Overrides Sub Finalize()
 
       Dispose(False)
 
       MyBase.Finalize()
 
   End Sub

    Public Sub Dispose
() Implements IDisposable.Dispose
        Dispose
(True)
 
       GC.SuppressFinalize(Me)
 
   End Sub

End 
Class 

الإستخدام
يُنصح باستخدام الكلاسات مع بيانات موجودة فعليا علي الكمبيوتر
تمرير بيانات خاطئة قد يؤدي الي Exceptions و حتي الأن هذا لم يتم مراعاته في الكود المكتوب


PHP كود :
       Dim filePath As String ".\tmp-0.gif"
 
       Dim ptr As IntPtr = New CairoIntPtr(filePath).Handle
        Dim cdf 
As New CairoDataFile(ptr)
 
       If IO.File.Exists(cdf.ToTextThen
            Me
.BackgroundImageLayout ImageLayout.Center
            Me
.BackgroundImage Image.FromStream(cdf.ToStream)
 
       End If 

يُنصح بالاستغناء عن هذا الجزء من الكود في الكلاس CairoDataFile
لقد تم كتابته في الكلاس للتوضيح فقط لا غير


PHP كود :
   Public ReadOnly Property ToStream As IO.MemoryStream
        Get
            Return 
New IO.MemoryStream(ToBytes())
 
       End Get
    End Property 
الرد }}}
تم الشكر بواسطة: الشاكي لله , ali.alfoly , ابو ليلى


الردود في هذا الموضوع
RE: كيفية قراءة ملف باستخدام IntPtr الخاص بالملف - بواسطة silverlight - 24-12-16, 03:13 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Star حماية السورس كود الخاص بك من الكسر مجانا YousefOkasha 7 6,917 03-07-24, 09:20 AM
آخر رد: أبو جودة
  [سلسلة تعليمية] شرح تفصيلي وكامل عن كيفية الاتصال بسيكوال وعمل اتاش برمجي وجلب اسماء السيرفرات ابو انس 3 4,031 25-02-22, 12:44 AM
آخر رد: atefkhalf2004
  قراءة رقم من ضمن سلسلة ارقام موجودة في الحقل عبدالكريم برشدان 2 1,821 06-11-21, 11:20 PM
آخر رد: عبدالكريم برشدان
  التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - مقدمة RaggiTech 3 6,338 30-07-21, 05:14 PM
آخر رد: kebboud
Photo كيفية اطهار جدول داخل الأخر alsouf 3 4,778 21-11-20, 09:15 AM
آخر رد: Anas Mahmoud
  لفهم كيفية الربط الذي يتم بين الجداول viv 4 5,407 03-10-20, 05:34 PM
آخر رد: Arfat007
  [VB.NET] كيفية استخدام اداوات ديف اكسبريس devexpressلادخال السجلات الى قاعدة بيانات نوع اكسس 13adam123 0 2,900 29-03-20, 12:50 PM
آخر رد: 13adam123
Star [مقال] كيفية تحويل اسعار العملات بإستخدام Yahoo Exchange Rates Web Service Programmation 9 9,432 22-02-20, 12:58 PM
آخر رد: دمعة المقهور
Exclamation كيفية تجاوز ظهور الخطا في Global.WindowsApplication1.My.Resources الرائد 0 2,726 13-08-19, 11:40 PM
آخر رد: الرائد
  [درس فيديو] كيفية استخدام الجملة الشرطية if alims 1 3,633 22-07-19, 06:38 AM
آخر رد: سعود

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


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