|
بسم الله الرحمان الرحيم في هذا الدرس ان شاء الله سوف نقوم بتعلم كيفية التعامل مع الملفات و المجلدات و ذلك عن طريق انشاء برنامج بسيط يقوم بفحص ملفات نصوص و يعطينا خصائصهم مثل وقت الانشاء و آخر مرة فتح فيها الملف و قراءة بداية كل ملف و نقوم بحفظ النتائج في ملف . و سنتبع من أجل ذلك الخطوات التالي : مقدمة انشاء واجهة البرنامج إظهار المجلد الحالي تغيير مسار المجلد الحالي التأكد من وجود مسار المجلد وضع محتوى مجلد معين في ListBox اختيار ملف معين إظهار النتائج حفظ النتائج تجربة البرنامج مقدمة: كل مبرمج كيفما كان نوعه و الا و يحتاج في مرة من المرات للتعامل مع الملفات و الجلدات في برامجه الشئ الذي نبع منه أهمية هذا الدرس لكل مبتدئ في عالم البرمجة، و إاليكم لائحة بالأمور التي يمكن أي سوف يفعلها البرنامج او حتى برنامجكم الخاص : ü كتابة النتائج في ملف نتائج لكن قبل ذلك التأكد من وجوده، فاذا كان موجودا نقوم باضافة النتائج اليه اما في الحالة المغايرة فنقوم بانشاءه ثم وضع المعلومات و النتائج داخله. ü جمع الملعلومات حول ملف معين مثل تاريخ الإنشاء و حجم الملف و ما الى ذلك من معلومات نعرفها جميعا. ü اظهار ملفات مجلد معين في لائحة ListBox الشئ الذي سيفرض علينا المرور من مجلد الى مجلد اذا ما كان المجلد الرئيسي يحتوي على مجلدات فرعية. طبعا قبل تمكنكم من عمل مثل هذه الوظائف في برنامجكم يجب عليكم أولا التعرف على الكلاسات المتوفرة و الخاصة بهذا الأمر فلذلك سنتعامل مع كلاسات و خصائص ال I/O الموجودة في الفيجوال بيسك 2003 فمثلا ال FileExplorer يمكننا من المرور على مجلد و معرفة الملفات التي فيه و خصائصها و و عند نهاية الدرس ستعرف كيف يمكنك تحديد ملف واحد لتعرف خصائصه و كتابتها في ملف احداث او ملف خاص بتسجيل النتائج. إنشاء واجهة البرنامج فقط لنكون متفقين في اسماء الأدوات و كل شئ اليكم لائحة بالأدوات اللازم انشاءها و كذا أسماءها : | الأداة | الخصائص | القيمة | | TextBox | Name Text | txtDirectory Directory | | Button | Name Text | btnSubmit &Submit | | Button | Name Text | btnExamine &Examine | | ListBox | Name | lstFilePick | | CheckBox | Name Text Checked | chkAttributes Attributes True | | CheckBox | Name Text Checked | chkFileLength File Length True | | CheckBox | Name Text Checked | chkLastAccess Last Access Hour True | | CheckBox | Name Text Checked | chkFirstLine Show First Line True | | CheckBox | Name Text Checked | chkSave Save Results False | اظهار المجلد الحالي: في هذه المرحلة نريد معرفة المجلد الحالي للبرنامج و الطريقة جد جد سهلة و لو كنتم تعاملتم مع الفيجوال بيسك 6 فستعرفونها و هي عن طريق الدالة CurDir(). ما نريد الآن هو وضع مسار المجلد الحالي في ال TextBox التي أنشأنها txtDirectory و اأمر جد بسيط نذهب للحدث Form_Load و نكتب الكود التالي : Me.txtDirectory.Text = CurDir() يمكنك تشغيل البرنامج من أجل التأكد من أن الكود يشتغل دون مشاكل. تغيير مسار المجلد الحالي طبعا في برنامجنا هذه المستعمل لديه الحق في تغيير مسار المجلد و كذا يلزمنا تغييره و ذلك عن طريق الدالة ChDir و ذلك طبعا بعد أن نأخذ المسار الجديد الذي كتبه المتعمل و من أجل ذلك نكتب الكود التالي في حدث Click للبزر الذي أنشأناه صالفا و أسميناه BtnSubmit | Private Sub btnSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubmit.Click 'اعلان متغير نضع فيه المسار الجديد Dim NewPath As String 'نضع محتوى ال txtDirectory 'في المتغير NewPath = Me.txtDirectory.Text 'نغير المسار عن طريق الدالة بتمريرنا المسار الجديد لها ChDir(NewPath) End Sub | التأكد من مسار المجلد طبعا لا يخلو أي برنامج من اخطأء لكن المبرمج الجيد هو الذي يستبق تلك الأخطاء بمعالجتها قبل ظهورها، و هنا في برنامجنا الخطأ قد يحدث كوننا لا نعرف ما سيكتب المستعمل في الخانة txtDirectory فقد يكتب أرقام او يكتب مسار غير موجود أصلا او حتى يترك الخانة فارغة لذا و جب معالجة هذ الأخطاء و استباقها و من أجل ذلك سنستعمل ال Try … Catch و سيكون الكود الجديد لل BtnSubmit بعد التعديل كالتالي : | Private Sub btnSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubmit.Click 'اعلان متغير يأخذ نص الخطأ لنظهره بعد ذلك Dim ErrorMessage As String 'اعلان متغير نضع فيه المسار الجديد Dim NewPath As String 'نضع محتوى ال txtDirectory 'في المتغير NewPath = Me.txtDirectory.Text 'بداية معالجة الأخطاء Try 'نغير المسار عن طريق الدالة بتمريرنا المسار الجديد لها ChDir(NewPath) 'اذا ما ترك المستعمل الخانة فارغة و لم يدخل مسارا نسجل الخطأ في المتغير الذي أعلناه أعلاه Catch ex As Exception When NewPath = "" 'و صف الخطأ ErrorMessage = "يجب عليك ادخال مسار في الخانة المخصصة لذلك" 'هنا مرحلة استباق الأخطاء الناتجة عن ادخال مسار خاطئ Catch 'وصف الخطأ ErrorMessage = "يجب عليك ادخل مسار موجود، اذا كنت تحاول الوصول الى مجلد في قرص غير الحالي المرجو تغير اسم القرص" Finally 'عدم اظهار رسالة الخطا الا اذا كان هناك خطأ If ErrorMessage <> "" Then MsgBox(ErrorMessage) End If End Try End Sub | الشرح مرفق في الكود كما ترون فلا داعي للإعادة :) وضع محتوى مجلد معين في ListBox من أجل عمل هذه الخطوة نضيف الإعلان التالي في بداية الحدث Click للزر BtnSubmit : | Dim ContentItem As String | ثم في السطر الذي يأتي بعد End Try نضع الكود التالي : | نمسح محتوى ال ListBox lstFilePick.Items.Clear() ' البحث سيكون فقط عن ملفات txt ContentItem = Dir("*.txt") 'اذا كانت النتيجة فارغة نطهر رسالة تفيد بذلك If ContentItem = "" Then ErrorMessage = "لم يعثر البرنامج على أي ملف من هذا النوع في المجلد المحدد" MsgBox(ErrorMessage) End If ' نواصل هنا البحث في كل المجلد عن الملفات Do Until ContentItem = "" ' اذا ما وجدت نتيجة نضيفها الى ال ListBoc lstFilePick.Items.Add(ContentItem) ' نمر للملف الموالي ContentItem = Dir() Loop | ' طبعا كل ملف نجده سيتم وضعه في الائحة و ذلك من أجل فحصه حيث يمكننا اختيار الملف الذي نريد و نفحصه و هذا ما سنرى في الخظوة التالية لكن قبل ذلك حاول تجربة البرنامج و جربه حتى تتأكد من ان الكود جيدو لا يوجد اخطاء. اختيار ملف معين طبعا بما أن الملفات الآن ظاهر في اللائحة فالمستعمل للبرنامج سيحتاج الى اختيار ملف معين من اجل فحصه و من اجل ذلك اضف الكود التالي الى الحدث Click للزر BtnExamine : | Private Sub btnExamine_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExamine.Click 'نعلن متغير من نوع Object 'سيحتوي على الملف الذي تم اختياره Dim thisFile As Object 'نضع اسم الملف الذي تم اختياره في المتغير thisFile = lstFilePick.SelectedItem ' هل تم اختيار ملف ؟؟؟؟؟ If thisFile Is Nothing Then 'اظهار رسالة خطأ MsgBox("سيدي الفاضل انت لم تختر أي ملف ") Exit Sub End If End Sub | بعد ان تم الآن اختيار الملف و معرفة الملف الذي تم اختياره سنرى كيفية تحديد المعلومات التي يجب جمعها حول هذا الملف و سيكون ذلك على مراحل : - اعلان مجموعة من المتغيرات التي ستساعدنا في مهمتنا و سنضعها في الحدث BtnExamine_Click و المتغيرات هي :
| Dim Attributes As FileAttribute Dim AttributeResult As String Dim LastAccess As Date Dim Length As Long Dim FirstLine As String Dim FinalString As String Dim ErrorMessage As String | أظن ان المتغيرات واضحة و ذات اسماء شارحة لنفسها. الخاصية GetAttr ترجع لنا عنصر من ال Enumiration المعروفة ب FileAttribute و التي تقدم خواص ملف او مجلد معين.البرنامج يتعامل فقط مع الملفات من نوع txt لذلك فعدة خصائص تم تجاهلها لكن ممكن تكتشفها بنفسك. - الآن بعد اعلان المتغيرات نبدأ بكتابة الكود الذي سيرجع لنا خصائص الملف المختار من قبل المستعملو سيتم اضافة الكود التالي بعد الجملة End If في الحدث btnExamine_Click :
| ' فحص الخصائص 'نرى اذا ما كان المستعمل قد اختار فحص الخصائص If chkAttributes.Checked = True Then Attributes = GetAttr(thisFile) If Attributes = 2 Then AttributeResult = "ReadOnly" ElseIf Attributes = 32 Then AttributeResult = "Archive" ElseIf Attributes = 34 Then AttributeResult = "ReadOnly and Archive" Else AttributeResult = "Normal" End If ' اضافة الخصائص الى النتائج stringAttributes = "خصائص الملف هي : " FinalString = stringAttributes + AttributeResult + "." + _ vbCr End If | الى هنا لا تحاول تنفيذ الكود لأنك ستجد خطأ لأننا لم نكمل الكود فانتظر الى ان ننتهي :) 3. نضف الكود التالي من أجل معرفة تاريخ آخر دخول للملف و سيكون أسفل الكود السابق : | معرفة تاريخ آخر ولود للملف' If chkLastAccess.Checked = True Then LastAccess = FileDateTime(thisFile) End If | 4. نضيف كود آخر من أجل معرفة حجم الملف المختار و نضعه تحت الكود السابق : | ' معرفة حجم الملف If chkFileLength.Checked = True Then Length = FileLen(thisFile) End If | 5. نضيف كود آخر من أجل قراءة السطر الأول للملف : | ' قراءة السطر الأول If chkFirstLine.Checked = True Then Try FileOpen(1, thisFile, OpenMode.Input) FirstLine = (InputString(1, 80)) Catch ex As Exception | |