التعامل مع الملفات و المجلدات


أنا آسف جدا على انقطاعي الطويل عن الكتابة فكما تعلمون الأحداث التي حدثت في مصر و من قبلها تونس و الآن ليبيا جعلتنا جميعا إما في المظاهرات أو لا نبارح التلفاز لمعرفة آخر التطورات ففي كل دقيقة نسمع و نرى خبرا جديدا فأرجو التماس العذر لي...

مقالنا اليوم عن كيفية التعامل مع المجلدات و الملفات  و المعلومات المعلقة بها و العمليات عليها.

مجال الأسماء المستخدم هو : system.io
   و كما قلنا فهي مكتبة تتعلق بعرض واستقبال البيانات و مراقبتها من و الى الملفات أو الجلدات أو حتى  عن طريق منافذ الكمبيوتر...

أهم الفئات الموجودة في هذه المكتبة و التي سنتعرف عليها في هذا المقال هي :
Directory(1) و DirectoryInfo : مخصصة  للتعامل مع المجلدات folders و المعلومات المتعلقة بها ((انشاء مجلد جديد ,حذف ,نسخ ,معرفة  وقت الانشاء ,معرفة حجمه ,نقل المجلد...))

(2) File و Fileinfo : التعامل مع الملفات المختلفة المعلومات المتعلقة بها ((انشاء ملف جديد ,حذف ,نسخ ,معرفة  وقت الانشاء ,فتح ,القراءة من الملف,الكتابة اليه...))


نلاحظ أن هناك الفئة directory   و الفئة directoryInfo   و هما تقومان بنفس الوظيفة من حيث التعامل مع المجلدات و كذلك الأمر بالنسبة للفئتنين File و Fileinfo ...فما هو الفرق بينها؟

اذا أردت أن تعرف الفرق بينها ولغيرهما من الفئات الأخرى ارجع الى نافذة Object Browser  و تعرف على الفرق بينهما .
الصورتان التاليتان توضحان الفرق بين الفئتين Directory and DirectoryInfo


ستلاحظ أن الفرق بين الفئتين directory , file   من جهة و الفئتين directoryinfo  و fileinfo  من جهة أخرى هو:

أن الأولتان مشتقتان مباشرة من الـ opject  أما الثانيتان فهما مشتقتان من الــ FileStreamInfo  المشتقة بدورها  من الــ  Opject

لذلك سوف نجد بعض الخصائص في الفئتين directoryinfo  و fileinfo   تزيد قليلا عن الخصائص في الفئتين directory , file كما ستجد الكثير من التشابه بين خصائص الأربع فئات السابقة و خاصة الفئتين Directory و File

وجه مقارنة آخر وهو أن الفئتين directory , file    دوالهما  من النوع Static  لذلك يتم استخدامها مباشرة , أما الفئتين directoryinfo  و fileinfo   فهما مختلفتان حيث يتطلب الأمر تعريف نسخة منها قبل استخدامها.


الفئة  File و Directory:

سوف نتعرف في هذا القسم على أهم الخصائص و الدوال لهتين الفئتين و ذلك لتشابههما الكبيرة في كثير من الدوال مع مراعاة أن الأولى للتعمامل مع المجلدات و الثانية للتعامل مع الملفات 


* الدالة  Createلانشاء مجلد أو ملف  جديد :
انشاء مجلد 
  IO.Directory.CreateDirectory("مسار المجلد الذي تريد انشاؤه")
 
انشاء ملف:
   System.IO.File.Create("d:\textfile.txt")
System.IO.File.Create("d:\pdfFile.pdf")

* الدالة  Deleteلحذف  مجلد folder أو ملف file :
حذف مجلد:
IO.Directory.Delete("المجلد الذي تريد حذفه", True)


في المثال السابق نرى أنه تم ارسال القيمة true  وذلك لحذف المجلد بما يحتويه من مجلدات و ملفات أخرى أما اذا استغنينا عن استخدامها فلن يعمل الكود السابق الا مع المجلدات الفارغة فقط )حيث سيظهر استثناء ان احتوى المجلد على ملفات او مجلدات فرعية (

 حذف ملف :
System.IO.File.Delete("d:\pdfFile.pdf")

اذهب الآن الى سلة المهملات وابحث عن الملفات و المجلدات  التي قمت بحذفها جيدا...حاول مئات المرات بل آلاف المرات لتجد تلك الملفات..... و لكنك في النهاية ستفشل فلن تجدها هناك فقد تم حذفها بشكل نهائي بما تحتويه من على وجه البسيطة  و تم ارسالها بمركبة فضائية الى كوكب آخر لتعيش بسلام هناك الى الأبد طبقا لاتفاقية ميكروسوفت لحقوق البرامج المحذوفة .

*الدالة Exists :تستخدم للتحقق من وجود المجلدات و الملفات  ,و تعود بالقيمة TRUE  اذا كان المجلد أو الملف موجود و بالقيمة false  اذا كان المجلد أو الملف  غير موجود .
المجلدات 
   If IO.Directory.Exists("d:\file1\file2") = True Then

            ....
        Else
          ....
        End If
 الملفات :
  If IO.file.Exists("d:\file1\file2") = True Then

            ....
        Else
          ....
        End If
*الدالة GetCreationTime و التي تعود بوقت و تاريخ  انشاء المجلد أو الملف,
الدالة GetLastAccessTime و التي تعود بوقت و تاريخ آخر عملية وصول الى المجلد أو الملف
الدالة GetLastWriteTime تعود بوقت و تاريخ آخر عملية كتابة على المجلدأو الملف
بالنسبة للمجلدات:
  MsgBox(IO.Directory.GetCreationTime("D:\folder"))
        MsgBox(IO.Directory.GetLastAccessTime("D:\folder"))
        MsgBox(IO.Directory.GetLastWriteTime("D:\folder"))

بالنسبة للملفات:
Msgbox(io. File.GetCreationTime("C:\MyFile.DAT"))
Msgbox(io. File.GetLastAccessTime("C:\MyFile.DAT"))
Msgbox( io.File.GetLastWriteTime("C:\MyFile.DAT"))

و لتعديل القيم السابقة بتاريخ تضعه أنت يمكنك استخدام الدوال

SetCreationTime   , SetLastAccessTime , SetLastWriteTime
IO.Directory.SetCreationTime("مسار المجلد", التاريخ)
   IO.Directory.SetLastAccessTime("مسار المجلد", Now)
        IO.Directory.SetLastWriteTime("الملف المجلد", Now)

الآن ..قم باضافة الأداة listbox  و button الى النموذج     form  لاستخدامها في الأمثلة التالية

* ●الدالة GetLogicalDrivers  تعود بمصفوفة من النوع string  تمثل أسماء محركات الأقراص الموجودة على الجهاز.

        Dim w As String
        For Each w In IO.Directory.GetLogicalDrives
            ListBox1.Items.Add(w)
        Next

سوف يظهر في الأداة listbox أسماء محركات الأقراص الموجودة على الجهاز.

● الدالة GetDirectories()    تعود بمصفوفة من النوع string  تمثل المجلدات الموجودة في المسار المحدد

   Dim w As String
        For Each w In IO.Directory.GetDirectories("c:\")
            ListBox1.Items.Add(w)
        Next




● الدالة  GetFiles()تعود بمصفوفة من النوع string  تمثل الملفات الموجودة في المسار المحدد
       Dim w As String
        For Each w In IO.Directory.GetFiles("c:\")
            ListBox1.Items.Add(w)
        Next




 ● الدالة  GetFileSystemEntries()تعود بمصفوفة من النوع string  تمثل الملفات و المجلدات  الموجودة في المسار المحدد


      Dim w As String
        For Each w In IO.Directory.GetFileSystemEntries("c:\", "*.htm")
            ListBox1.Items.Add(w)
        Next



الفئة      :DirectoryInfo



تشبه هذه الفئة الفئتين السابقتين في كثير من الأوامر مع اختلاف طريقة التعريف و العمل .
قبل البدء في استخدامها سوف تحتاج الى تعريف نسخة من هذه الفئة و تمرير المكان الذي نود البدء منه اليها  كما في الكود التالي :
   Dim z As New IO.DirectoryInfo("d:\folder")

فلانشاء مجلد جديد نكتب الكود التالي :

     Dim a As New IO.DirectoryInfo("d:\folde1\folder2\folder3\folder4")
        a.Create()

في المثال السابق اذا لم يجد folder1  فسيقوم بانشائه و يضع بداخله باقي المجلدات وهكذا...

و لحذف مجلد:
  Dim CrtDirInfo As New IO.DirectoryInfo("المجلد الذي تريد حذفه ")
        CrtDirInfo.Delete(True)


للحصول على وقت و تاريخ انشاء المجلد أو آخر تحديث له, آخر تاريخ وصول
       Dim d As New IO.DirectoryInfo("D\;المجلد\المجلد1")
        MsgBox(d.CreationTime)
        MsgBox(d.LastAccessTime)
        MsgBox(d.LastWriteTime)
لا يوجد بها شيء جديد يذكر حيث أنها تشبه الفئة Directory  في عمل الكثير من دوالها بنفس الطريقة مع اختلاف طريقة كتابة الكود و طريقة التنفيذ 


أما الفئة FileInfo  التي تشبه الفئة  File في عملها فهي ايضا تحتوي على مجموعة من الطرق والخصائص الخاصةبطبيعة عملها كالخاصية   length  التي تعود بحجم الملف و مجموعة أخرى من الطرق التي تستخدم لفتح و انشاء الملفات و قراءتها و التي سنتعرف عليها بالتفصيل في درس التعامل مع الملفات النصية و كيفية فتحها للكتابة و القراءة

أتمنى يكون الدرس واضح و ان كان هناك أي أمر غير واضح فلا تتردد في السؤال .

  

هناك 3 تعليقات:

  1. مشكوررررررررررررررر

    ردحذف
  2. السلام عليكم ورحمة الله وبركاته
    أود أن أشكرك في البدايه علي هذا الموضوع الأكثر من راااااائع
    وعندي طلب بسيط من حضرتك
    أريد كود يقوم بنسخ الخطوط الي مسارها في windows
    بمعني أن يقوم بتنصيب الخطوط علي الجهاز
    وقد حاولت نسخهم بالطريقه FileCopy
    وينجح معي الامر في نسخ الملفات لأي مسار الا المسار C:\Windows\Fonts
    أريد من حضرتك أن تشرح لي كيفية تثبيت هذه الخطوط
    مع مراعاة أني مبتدئ

    ردحذف