منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : معلومة ::: FileSystemWatcher أداة هامة جداً
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
كاتب الموضوع : BADRMEDIA


السلام عليكم ورحمة الله وبركاته

بصراحة من العيب أن تكون لديك هذه الأداة FileSystemWatcher ولا تعرف قيمتها

فلها فوائد جمة وستفتح عليك أفكار برامج كثيرة وممتعة - فوظيفتها ببساطة مراقبة أى تغييرات على مجلد معين أو أى شئ بداخله


كيفية استخدامها

أول شئ ضعها على النموذج وستجدها فى قائمة الأدوات


لها أربع خصائص ذات أهمية قبل استخدامها لابد تعيين قيم لهم

الخاصية Path و Filter و NotifyFilter و IncludeSubdirectories


الخاصية Path نحدد فيها مسار المجلد الذي نرغب بمراقبته ولكن سيتم إعلامك بالتغييرات داخل المجلد وليس بالتغييرات على خصائصه هو

الخاصية IncludeSubdirectories

فى حالة جعلها تساوى True فأنك ستراقب المجلد بكل شجرته وتفرعاته من مجلدات فرعية منه وملفات أى الجذر هو المجلد المحدد - وفى حالة جعلنا قيمة الخاصية False سيكون المراقبة على المجلد فقط


الخاصية Filter تحدد فيها ملفات معينة إذا أردت مراقبة ملفات ذات امتداد محدد

واستخدام *.* تستطيع مراقبة جميع الملفات دون تحديد
أما فى حالات التحديد فأنك تراقب المحدد فقط مثل *.exe
القيمة الافتراضية لهذه الخاصية هي Null وهي تطابق *.*

الخاصية NotifyFilter مكودة على مستوى البت bit-coded بحيث يمكنك تحديد تشكيلة من واحد أو أكثر من قيم مرقمة enumerated كـ Attributes و CreationTime و DirectoryName و FileName و LastAccess و LastWrite و Security و Size و القيمة الافتراضية لها هي

LastWrite Or FileName Or DirectoryName ففي هذه الحالة لن تظهر تنبيهات عندما تتغير الخصائص


مثال عن كيفية تعريف تحكم FileSystemWatcher من أجل التغييرات في شجرة المجلد C:\Windows


ندرج الأدة FileSystemWatcher



كود :
FileSystemWatcher1.Path = "c:\windows"
' بالخاصية True نستطيع مراقبة المجلدات الداخلية المتفرعة من المجلد
FileSystemWatcher1.IncludeSubdirectories = True
' نحن سنراقب ملفات DLL فقط
FileSystemWatcher1.Filter = "*.dll"

FileSystemWatcher1.NotifyFilter = FileSystemWatcher1.NotifyFilter Or NotifyFilters.Attributes

FileSystemWatcher1.EnableRaisingEvents = True


اظهار التنبيهات

نحن عرفنا الخصائص جاء دور الحصول على التنبيهات

وتتم التنبيهات فور حدوث تغيير

كطريقة للحصول على التنبيهات من FileSystemWatcher هي كتابة معالجات للأحداث الخاصة بهذا العنصر ولكن هذه الأحداث لن تبدأ بالعمل إلا بضبط الخاصية EnableRaisingEvents = True

و تستقبل الأحداث Created و Deleted و Changed البارامتر FileSystemEventArgs الذي يعرض خاصيتان هامتان Name اسم الملف الذي حدث عليه التغير و FullPath مسار ذلك الملف



كود :
Private Sub FileSystemWatcher1_Created(ByVal sender As Object, _
ByVal e As FileSystemEventArgs) Handles FileSystemWatcher1.Created

msgbox("File created: {0}", e.FullPath)

End Sub


كود :
Private Sub FileSystemWatcher1_Deleted(ByVal sender As Object, _
ByVal e As FileSystemEventArgs) Handles FileSystemWatcher1.Deleted

msgbox("File deleted: {0}", e.FullPath)

End Sub



كود :
Private Sub FileSystemWatcher1_Changed(ByVal sender As Object, _
ByVal e As FileSystemEventArgs) Handles FileSystemWatcher1.Changed

msgbox("File changed: {0}", e.FullPath)

End Sub


البارامتر FileSystemEventArgs يقوم أيضاً بعرض خاصية ChangeType وهي خاصية مرقمة Enumerated حيث تخبرك بالحدث الذي وقع على الملف بحيث يمكنك استخدامها لعمل إجراء معالجة وحيد للأحداث الثلاثة السابقة



كود :
Private Sub FileSystemWatcher1_All(ByVal sender As Object, ByVal e As FileSystemEventArgs) _
Handles FileSystemWatcher1.Changed, FileSystemWatcher1.Created, FileSystemWatcher1.Deleted

msgbox("File changed: {0} ({1})", e.FullPath, e.ChangeType)

End Sub
الحدث Changed لا يستقبل أية معلومات حول نوع التغيير الذي سبب الحدث

الحدث Renamed يستقبل البارامتر RenamedEventArgs الذي يعرض خاصيتان إضافيتان هما OldName الاسم القديم و OldFullPath المسار الكامل القديم


كود :
Private Sub FileSystemWatcher1_Renamed(ByVal sender As Object, ByVal e As RenamedEventArgs) _
Handles FileSystemWatcher1.Renamed


msgbox("File renamed: {0} => {1}", e.OldFullPath, e.FullPath)


End Sub




صفحة الأدة فى مكتبة MSDN


http://msdn2.microsoft.com/en-us/lib...er(VS.71).aspx