إخواني ..
عندي استفسارين ...
1- كيف يمكنني كتابة وقراءة بيانلت على شكل Object من و إلى ملف ؟؟؟؟
2- كيف يمكنني كتابة بيانات إلى ملف ولكن بمعرفة مكان تخزين هذه البيانات بحيث استرجعها من خلال عنوان هذا المكان , مثل Random Access File ؟
إخواني ..
عندي استفسارين ...
1- كيف يمكنني كتابة وقراءة بيانلت على شكل Object من و إلى ملف ؟؟؟؟
2- كيف يمكنني كتابة بيانات إلى ملف ولكن بمعرفة مكان تخزين هذه البيانات بحيث استرجعها من خلال عنوان هذا المكان , مثل Random Access File ؟
السلام عليكم
كيف الحال اخوي MKSOFT
كتابة Object في ملف بسيطه جدا وهذه العملية على علمي تسمى بـ Serialization
ولكن قبل ذلك يجب إخبار الـ Compiler بأن هذا الـ Class الذي ستسسل الـ Object منه إلى ملف بأنه Serializable
عن طريق كتابة [serializable] قبل تعريفه
وعملية إسترجاع الـ Object من الملف تسمى بـ Deserialization ولكي توضح العملية دعنا نأخذ الكلاس التالي
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication8
{
[Serializable] // To indecate that this class is SERIALIZABLE
class MyClass
{
public int data;
public MyClass(int data)
{
this.data = data;
}
}
}ولآن سنقوم بإستخدام كل من الـ namespaces التاليه لكي نقوم بعملية سلسلة الـ Object ألا وهما
using System.Runtime.Serialization.Formatters; using System.Runtime.Serialization.Formatters.Binary;
كما هو موضح في المثال التالي
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization.Formatters.Binary;
namespace ConsoleApplication8
{
class Program
{
static void Main(string[] args)
{
try
{
MyClass serOb = new MyClass(10); // Object to be serialize
Console.WriteLine("Data value of serOb: " + serOb.data);
FileStream serFs = new FileStream("C:\\MyClass.txt", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
Console.WriteLine("Serializing...");
bf.Serialize(serFs, serOb); // Serializing Object serOb of MyClass
serFs.Flush();
serFs.Close();
FileStream deFs = new FileStream("C:\\MyClass.txt", FileMode.Open);
MyClass deOb; // File will be desrialized to this object
Console.WriteLine("Deserializing...");
deOb = (MyClass)bf.Deserialize(deFs); // Deserializing to deOb
deFs.Flush();
deFs.Close();
Console.WriteLine("Data value of deOb: " + deOb.data);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}أرجو أن يكون الشرح واضح واسئل الله العلي القدير أن يوفقك في طريقك للعلم وأن ينفعنا وإياكم بهذا
أخوك Robatic
اللهم إني أعوذ بك من علم لا ينفع ومن قلب لا يخشع ومن عين لا تدمع
تحياتي أخي Robotic ..
لكن وجدت من خلال بحثي , انه يجب إضافة هذا الكود لClass الذي تريد عمل له Serialization & Deserialization
public MyClass(SerializationInfo info, StreamingContext context)
{
data = (Int)info.GetValue("data",typeof(int));
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("data", data);
}