03-01-2010, 01:37 PM
|
|
مبرمج المنتدى الادارة تكليف لا تشريف
|
|
تاريخ التسجيل: Oct 2009
العمر: 34
المشاركات: 3,606
|
|
الدرس الخمسون : System.IO - الجزء الثاني - دورة .net 2008
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .
نواصل هنا درسنا الذي بدأناه في الجزء السابق عن 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 .
الفئة File Stream :
هذه الفئة التي تطبق الفئة القاعدية abstract class السابق تختص فقط بالتعامل مع ال streaming مع الملفات .
المثال التالي يوضح الكتابة في عدة أماكن من الملف ومن ثم قراءة البيانات المكتوبة - قبل الكتابة فقط نحتاج لتحويل الرسالة إلى bytes لذا لا تنس هذه الخطوة .
C#:
كود PHP:
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:
كود PHP:
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
التعامل مع الفئات المشتقة :
ذكرنا في أول دروسنا في هذا الموضوع ( راجع الدرس الأول ) أن لدينا عدة انواع من القراءة والكتابة في stream ذكرنا منها StreamWriter, StreamReader و StringWriter, StringReader و BinaryReader, BinaryWriter ، وهم ما سنبدأ في التعرف عليهم الآن .
StreamWriter, StreamReader :
الفئات الأشهر والأكثر استخداماً من بين الفئات الثلاث السابقة ، تحتوي على الدوال الاساسية لعملية الكتابة والقراءة التالية :
StreamWriter :
Close() : اغلاق .
Flush() : مسح كافية محتويات ال buffer .
NewLine : سطر جديد .
Write() : كتابة عادية .
WriteLine() : كتابة مع سطر جديد .
StreamReader :
تحتوي بالاضافة إلى الدوال الثلاث الأولى في الفقرة السابقة :
Peek() قراءة الحرف التالي مباشرة للمكان الحالي دون تغيير مكان المؤشر.
Read() : القراءة .
ReadBlock() : قراءة مجموعة من الداتا ووضعها في ال buffer .
ReadLine() : قراءة سطر كامل .
ReadToEnd() : قراءة من مكان المؤشر حتى النهاية .
أمثلة :
مثال يجمع عمليتي القراءة والكتابة إلى ملف نصي :
C#:
كود PHP:
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:
كود PHP:
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
ناتج عملية الكتابة في الملف :
وناتج عملية القراءة على ال Console:
*** لكن ناتج المتغير النصي سيكون بدون علامة السطر الجديد والذي سيكون ناتج عن الدالة ...
StringWriter, StringReader :
كما ذكرنا سابقاً لا يوجد اي فارق عما سبق ، فقط الناتج يعود في string وهو ما يمكنك من عملية بالشكل التالي مثلاً :
C#:
كود PHP:
StringBuilder stbuilder = strWriter.GetStringBuilder();
stbuilder.Remove(0, 10);
stbuilder.Insert(0, "Ahmed Gamal");
vb.net:
كود PHP:
Dim stbuilder As StringBuilder = strWriter.GetStringBuilder()
stbuilder.Remove(0, 10)
stbuilder.Insert(0, "Ahmed Gamal")
BinaryReader, BinaryWriter
تمكنك من الكتابة والقراءة والتخزين في ملفات binary ، مشتقة من الفئة System.Object وتحتوي على أغلب الدوال الموجودة في الاربع فئات السابقة . اضافة إلى الدالة ReadXXXX() حسب نوع المحتويات ، هذا المثال للقراءة والكتابة باستخدام هذه الفئة :
C#:
كود PHP:
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:
كود PHP:
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
إلى هنا نكون قد انتهينا من درس هذا اليوم ، بقي لدينا جزء واحد فقط في موضوع الملفات نستعرضه سوية غداً إن شاء الله .
والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
توقيع : khaledbelal |
(أَفَأَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا بَيَاتاً وَهُمْ نَآئِمُونَ {97} أَوَ أَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا ضُحًى وَهُمْ يَلْعَبُونَ {98}
أَفَأَمِنُواْ مَكْرَ اللّهِ فَلاَ يَأْمَنُ مَكْرَ اللّهِ إِلاَّ الْقَوْمُ الْخَاسِرُونَ {99}). سورة الأعراف.
|
|