تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الدرس الخمسون : System.IO - الجزء الثاني .
#1
كاتب المقال احمد جمال
[COLOR="#008000"] بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .
[/COLOR]

نواصل هنا درسنا الذي بدأناه في الجزء السابق عن System.IO .

Stream :

ال Stream يقصد به تدفق او نقل البيانات ما بين مصدر ومستقبل سواء كان ذلك بين ملفين او بين جهازين على الشبكة أو طابعة أو خلافه ، حيث يتم نقل البيانات في الغالب على شكل
sequance of bytes حتى نهاية الملف أو البيانات .
في .net ، هناك الفئة System.IO.Stream والتي تعتبر الفئة الأم التي سنتعامل مع غالب فئاتها لاحقاً ، تحتوي هذه الفئة على الدوال والخصائص الرئيسية التالية -
abstract class - :

CanRead, CanWrite : خصائص تتيح لك معرفة إذا كانت عملية ال Stream هذه تقبل عملية الكتابة أو القراءة وغيرها .
Close() : اغلاق العملية وكل ما يتعلق بها من ملفات وخلافه .
Flush() : تحديث بيانات المستقبل بالبيانات الموجودة حالياً في Buffer ، لو لم يكن هذه العملية تدعم وجود Buffer فهذه الدالة لا تقوم بأي شيء في الواقع .
Length : خاصية تعيد حجم ال stream بالبايت .
Position : تحدد المكان في ال stream .
Read(), ReadByte() : قراءة بايت او مجموعة من bytes .
Seek() : وضع المؤشر في مكان جديد في هذا ال stream .
SetLength() : تحديد طول ال stram الحالي :
Write(), WriteByte() : كتابة بايت او مجموعة من ال bytes .


الملفات المرفقة صورة/صور
   
الرد }}}
تم الشكر بواسطة:
#2
الفئة File Stream :

هذه الفئة التي تطبق الفئة القاعدية abstract class السابق تختص فقط بالتعامل مع ال streaming مع الملفات .
المثال التالي يوضح الكتابة في عدة أماكن من الملف ومن ثم قراءة البيانات المكتوبة - قبل الكتابة فقط نحتاج لتحويل الرسالة إلى bytes لذا لا تنس هذه الخطوة .

C#:
كود :
private void filestreamexample(string msg, string beforeendmsg)
{
using(FileStream f1 = File.Open(@"C:\test.txt",
FileMode.Create))
{
byte[] msgArray = Encoding.Default.GetBytes(msg);
byte[] beforeendmsgArray = Encoding.Default.GetBytes(beforeendmsg);
f1.Write(msgArray , 0, msgArray.Length);
f1.Position = fStream.Lenght-10;
f1.Write(beforeendmsgArray , 0, msgAsByteArray.Length);

// view total message.
long totalLenght=msgArray.Length + msgAsByteArray.Length;
byte[] filemsg = new byte[totalLenght];
for (int i = 0; i < totalLenght; i++)
filemsg[i] = (byte)f1.ReadByte();

Console.WriteLine(Encoding.Default.GetString(filemsg));
}
}

vb.net:
كود :
Private Sub filestreamexample(ByVal msg As String, ByVal beforeendmsg As String)
    Using f1 As FileStream = File.Open("C:\test.txt", FileMode.Create)
        Dim msgArray As Byte() = Encoding.[Default].GetBytes(msg)
        Dim beforeendmsgArray As Byte() = Encoding.[Default].GetBytes(beforeendmsg)
        
        f1.Write(msgArray, 0, msgArray.Length)
        f1.Position = fStream.Lenght - 10
        f1.Write(beforeendmsgArray, 0, msgAsByteArray.Length)
        
        
        ' view total message.
        Dim totalLenght As Long = msgArray.Length + msgAsByteArray.Length
        Dim filemsg As Byte() = New Byte(totalLenght - 1) {}
        For i As Integer = 0 To totalLenght - 1
            filemsg(i) = CByte(f1.ReadByte())
        Next
        
        
        
        Console.WriteLine(Encoding.[Default].GetString(filemsg))
    End Using
End Sub
الرد }}}
تم الشكر بواسطة:
#3
التعامل مع الفئات المشتقة :

ذكرنا في أول دروسنا في هذا الموضوع ( راجع الدرس الأول ) أن لدينا عدة انواع من القراءة والكتابة في stream ذكرنا منها StreamWriter, StreamReader و StringWriter, StringReader و BinaryReader, BinaryWriter ، وهم ما سنبدأ في التعرف عليهم الآن .
الرد }}}
تم الشكر بواسطة:
#4
StreamWriter, StreamReader :

الفئات الأشهر والأكثر استخداماً من بين الفئات الثلاث السابقة ، تحتوي على الدوال الاساسية لعملية الكتابة والقراءة التالية :

StreamWriter :

Close() : اغلاق .
Flush() : مسح كافية محتويات ال buffer .
NewLine : سطر جديد .
Write() : كتابة عادية .
WriteLine() : كتابة مع سطر جديد .

StreamReader :

تحتوي بالاضافة إلى الدوال الثلاث الأولى في الفقرة السابقة :

Peek() قراءة الحرف التالي مباشرة للمكان الحالي دون تغيير مكان المؤشر.
Read() : القراءة .
ReadBlock() : قراءة مجموعة من الداتا ووضعها في ال buffer .
ReadLine() : قراءة سطر كامل .
ReadToEnd() : قراءة من مكان المؤشر حتى النهاية .

أمثلة :

مثال يجمع عمليتي القراءة والكتابة إلى ملف نصي :
C#:

كود :
[align=left] private void write(string msg)
{
using(StreamWriter w1 = File.CreateText("test.txt"))
{
w1.Write("Start");
w1.Write(writer.NewLine);
w1.WriteLine(msg);
}
}
private string read()
{
using (StreamReader s1 = File.OpenText("test.txt"))
            {
                string input = null;
  string msg="";
                while ((input = sr.ReadLine()) != null)
                {
                    Console.WriteLine(input);
   msg+=input;
                }
  return msg;
            }
}

vb.net:

Private Sub write(ByVal msg As String)
    Using w1 As StreamWriter = File.CreateText("test.txt")
        w1.Write("Start")
        w1.Write(writer.NewLine)
        w1.WriteLine(msg)
    End Using
End Sub
Private Function read() As String
    
    Using s1 As StreamReader = File.OpenText("test.txt")
        Dim input As String = Nothing
        Dim msg As String = ""
        While (input = sr.ReadLine()) IsNot Nothing
            Console.WriteLine(input)
            msg += input
        End While
        Return msg
    End Using
    
End Function
[/align]

ناتج عملية الكتابة في الملف :
[ATTACH=CONFIG]905[/ATTACH]
وناتج عملية القراءة على ال Console:
[ATTACH=CONFIG]906[/ATTACH]


الملفات المرفقة صورة/صور
       
الرد }}}
تم الشكر بواسطة:
#5
StringWriter, StringReader :

كما ذكرنا سابقاً لا يوجد اي فارق عما سبق ، فقط الناتج يعود في string وهو ما يمكنك من عملية بالشكل التالي مثلاً :
C#:
كود :
StringBuilder stbuilder = strWriter.GetStringBuilder();
stbuilder.Remove(0, 10);
stbuilder.Insert(0, "Ahmed Gamal");

vb.net:

كود :
Dim stbuilder As StringBuilder = strWriter.GetStringB
uilder()
stbuilder.Remove(0, 10)
stbuilder.Insert(0, "Ahmed Gamal")
-------------------------------------------------------------------------------------------

BinaryReader, BinaryWriter

تمكنك من الكتابة والقراءة والتخزين في ملفات binary ، مشتقة من الفئة System.Object وتحتوي على أغلب الدوال الموجودة في الاربع فئات السابقة . اضافة إلى الدالة ReadXXXX() حسب نوع المحتويات ، هذا المثال للقراءة والكتابة باستخدام هذه الفئة :

C#:

كود :
FileInfo f = new FileInfo("Binary.dat");
using(BinaryWriter bwriter = new BinaryWriter(f.OpenWrite()))
{
double dbl = 1234.67;
long lng = 34567000;
string str = "A, B, C";
// Write differnt data.
bwriter.Write(dbl);
bwriter.Write(lng);
bwriter.Write(str);
}

// Reading using ReadXXX;
using(BinaryReader breader = new BinaryReader(f.OpenRead()))
{
Console.WriteLine(breader.ReadDouble());
Console.WriteLine(breader.ReadInt64()); // == long as i think , i am not sure.
Console.WriteLine(breader.ReadString());
}

vb.net:
كود :
Dim f As New FileInfo("Binary.dat")
Using bwriter As New BinaryWriter(f.OpenWrite())
    Dim dbl As Double = 1234.67
    Dim lng As Long = 34567000
    Dim str As String = "A, B, C"
    
    ' Write differnt data.
    bwriter.Write(dbl)
    bwriter.Write(lng)
    bwriter.Write(str)
End Using

' Reading using ReadXXX;
Using breader As New BinaryReader(f.OpenRead())
    Console.WriteLine(breader.ReadDouble())
    Console.WriteLine(breader.ReadInt64())
    ' == long as i think , i am not sure.
    Console.WriteLine(breader.ReadString())
End Using

إلى هنا نكون قد انتهينا من درس هذا اليوم ، بقي لدينا جزء واحد فقط في موضوع الملفات نستعرضه سوية غداً إن شاء الله .

[COLOR="#008000"]والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
[/COLOR]
الرد }}}
تم الشكر بواسطة:
#6
جميع الردود المكتوبة ل
الكاتب الموضوع احمد جمال
الرد }}}
تم الشكر بواسطة:



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


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