Professional Documents
Culture Documents
الفصل الثاني
ثمانية أشكال مختلفة اخترنا أبسطها ،وهو مسار واسم الملف المراد إنشاؤه .وبما أنّنا ّ
مررنا االسم مع المسار،
فسيتم إنشاء هذا الملف في نفس المسار المحدد .
بعد ذلك نستخدم التابع WriteLineمن المتغيّر fileWriterلكتابة عناصر
المصفوفة linesعلى أسطر منفصلة ضمن الملف data.txt.العبارة البرمجيّة في السطر
األخير ضرورية إلغالق الملف باستدعاء التابع Closeوتحرير المصدر الذي يحجزه في نظام التشغيل.
جرب تنفيذ البرنامج ،لن تحصل على شيء على الشاشة ،ولكن إذا فتحت الملف data.txtتجد ضمنه ّ
ّ
مجلد المشروع )ستجد األسطر الثالثة موجودة ً ضمنه).
مالحظة مهمة في التعامل مع الملفات :
عند انشاء كائن للقراءة من الملف أصبح الملف مشغوالً من قبل البرنامج الخاص بك ,حيث قمت بفتح
مجرى مع الملف للتعامل معه ,فيجب علينا بعد تنفيذ العمليات على الملف سواء القراءة منه أو الكتابة فيه
اغالق ذلك المجرى ويكون عبر استخدام الدالة ;)(. close
أن مصادر نظام في الحقيقة ليس هذا هو االستخدام األمثل للصنف StreamWriterوالسبب في ذلك ّ
التشغيل محدودة ،حيث يؤدّي التعامل مع الملفات إلى حجز بعض من هذه المصادر ،لذلك ينبغي تحرير هذه
فورا عندما تنتهي الحاجة إليها .قد يبدو أنّنا قد فعلنا ذلك باستخدام التابع Closeوهذا صحيح
المصادر ً
تما ًما ،ولكن ليس بالسرعة القصوى الممكنة! هناك أسلوب آخر يسمح بتحرير المصادر بشكل أكثر فعاليّة
وسرعة باستخدام الكلمة المحجوزة using.سأعدّل البرنامج السابق ليستخدم هذا األسلوب الجديد .انظر
البرنامج بعد التعديل:
)static void Main(string[] args
{
" string[] lines = { "c# programming", " c programming
;}" ," c++ programming
using (StreamWriter filewriter=new
))"StreamWriter(@"d:\data.txt
)foreach (string line in lines
{
;)filewriter.WriteLine(line
}
}
الحظ كيف وضعنا عبارة التصريح عن المتغيّر fileWriterواإلسناد إليه ضمن عبارة using.
وبمجرد وصول تنفيذّ في الواقع لن يكون المتغيّر fileWriterمرئيًّا خارج حاضنة ،using
فورا وتحرير المصدر الذي يحجزه .يظهر من البرنامج السابق أنّنا
البرنامج إلى القوس سيتم إغالق الملف ً
لم نعد نحتاج إلى استخدام التابع . Close.
:تمرين
اكتب برنامج بلغة سي شارب يقوم بقراءة ثالث ملفات نصية
( ودمجها في ملف نصي آخرd:\\t1.txt)(d:\\t2.txt)(d:\\t3.txt)
. (c:\\t.txt)
static void Main(string[] args)
{
StreamWriter sw1 = new StreamWriter(@"d:\\t1.txt");
string t1 = " c# programming ";
sw1.WriteLine(t1);
sw1.Close();
StreamWriter sw2 = new StreamWriter(@"d:\\t2.txt");
string t2 = " c programming ";
sw2.WriteLine(t2);
sw2.Close();
StreamWriter sw3 = new StreamWriter(@"d:\\t3.txt");
string t3 = " c++ programming ";
sw3.WriteLine(t3);
sw3.Close();
StreamWriter sw = new StreamWriter(@"d:\\t.txt");
StreamReader sr = new StreamReader(@"d:\\t1.txt");
sw.WriteLine(sr.ReadToEnd());
sr.Close();
sr = new StreamReader(@"d:\\t2.txt");
sw.WriteLine(sr.ReadToEnd());
sr.Close();
sr = new StreamReader(@"d:\\t3.txt");
sw.WriteLine(sr.ReadToEnd());
sr.Close();
sw.Close();
Console.ReadKey();
}
4 بسمة سراقبي.م
جامعة ادلب
كلية الهندسة المعلوماتية
السنة الثانية -مادة برمجة متقدمة 1
تمرين :
اكتب برنامج بلغة c#يقوم بحذف أي سطر يحتوي عددا ً موجبا ً من ملف يتألف من عدة أسطر في كل
سطر عدد صحيح واحد فقط .
)static void Main(string[] args
{
;)"StreamWriter sw = new StreamWriter(@"d:\s.txt
;"string s = "5\n4\n2\n-4\n7\n-48
;)sw.WriteLine(s
;)(sw.Close
;)"StreamReader sr = new StreamReader(@"d:\s.txt
;)(string line = sr.ReadLine
;"" = string nexttext
)while (line != null
{
)if (Convert.ToInt32(line) < 0
{
;"nexttext += line + "\n
}
;)(line = sr.ReadLine
}
;)(sr.Close
;)File.WriteAllText(@"d:\\s.txt", nexttext
;)(Console.ReadKey
}
سوف نقوم بدايةً بقراءة سطر سطر من الملف وفي كل سطر سنقوم بتحويل القيمة النصيّة إلى عدد صحيح
ونختبره في حال كان سالب نقوم بتخزينه في متحول نصي ,وفي نهاية قراءة جميع األسطر ,نقوم بكتابة
المتحول النصي الناتج عن األعداد السلبية داخل المستند النصي مع استبدال النص السابق الذي داخله :
;)"StreamReader sr = new StreamReader(@"d:\\s.txt
;)(string line = sr.ReadLine
;"" = string nexttext
قمنا بتعريف كائن من الصف الخاص بقراءة الملف ومررنا له مسار الملف ,ثم أنشأنا متحول نصي وخزنا
بداخله سطر من الملف الموجود لدينا ,ومتحول نصي آخر سنقوم بتخزين األعداد السالبة الموجودة في
النص بداخله .
واآلن قمنا بإنشاء حلقة تكرارية تختبر اذا كان السطر فارغا ً (أي أننا لم نصل لنهاية الملف)ندخل إلى
الحلقة ونختبر اذا كان السطر يحتوي قيمة عددية أصغر من الصفر نقوم بوضعها في المتحول النصي
الذي أنشأناه سابقا ً ,وبعدها ننتقل إلى سطر آخر ونعود لنكرر الحلقة لحين تنتهي .
;)(sr.Close
;)File.WriteAllText(@"d:\\s.txt", nexttext
وفي النهاية اغلقنا الملف الخاص بالقراءة ,واستخدمنا صف جديد باسم Fileيحتوي على ميثود باسم
WriteAllTextتستقبل برامترين :األول هو مسار الملف والثاني هو الملف الذي نريد وضعه في
الملف المحدد بالمسار .
تقوم هذه الدالة باستبدال النص الموجود في الملف المحدد بالنص المرسل .