تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الدرس الحادي والخمسون - System.IO - الجزء الثالث والأخير
#1
كاتب الموضوع : أحمد جمال

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


نواصل اليوم مع الجزء الاخير من سلسلة دروس التعامل مع الملفات من خلال .net 2008 ، ونبدأ بموضوع مراقبة الملفات ...

FileSystemWatcher :

تعتبر هذه الفئة مفيدة جداً في حالة رغبتنا في مراقبة سلوك ملف معين ومعرفة اي تغيير يطرأ عليها من التغييرات الموجودة في ال System.IO.NotifyFilters enum والذي يراقب اي من التغييرات التالية :


كود :
public enum NotifyFilters
{
Attributes, CreationTime,
DirectoryName, FileName,
LastAccess, LastWrite,
Security, Size,
}

طبعاً بما اننا نتحدث عن events وتغييرات ، سنحتاج فوراً لتعريف دوال يتم تنفيذها مرتبطة بالاحداث ، اي دالة تستخدم لقراءة احداث مثل التعديل والتغيير وخلافه لا بد ان تكون على شكل delegate التالي :

كود :
[FONT=Tahoma]void MyNotificationHandler(object source, FileSystemEventArgs e)[/FONT]

حدث تغيير الاسم لا بد أن يتبع لل delegate التالي :

كود :
[FONT=Tahoma]void MyNotificationHandler(object source, RenamedEventArgs e)[/FONT]

الآن سنقوم بتعريف برنامج عادي ، يقوم بمراقبة حالة الملفات ، طبعاً ولإننا نرغب في ان نرى نتائج البرنامج فلا بد ان نجعل البرنامج يعمل حتى يضغط المستخدم حرف q مثلاً ، لو كنا في windows Forms كان بامكاننا المراقبة مباشرة طبعاً ، في مثالنا هذا سنراقب كافة الملفات النصية في القرص الصلب c:\ لحدثي الاضافة والحذف :
C#:

كود :
[FONT=Tahoma]FileSystemWatcher watcher = new FileSystemWatcher();[/FONT]
[FONT=Tahoma]// monitor files at:
watcher.Path = @"c:\";[/FONT]
[FONT=Tahoma]// monitor files when
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName| NotifyFilters.DirectoryName;

// watch files of type
watcher.Filter = "*.txt";[/FONT]
[FONT=Tahoma]// watch events:
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);


watcher.EnableRaisingEventys = true;
Console.WriteLine("Press 'q' to quit app.");[/FONT]
[FONT=Tahoma]while (Console.Read() != 'q') ;[/FONT]

vb.net:

كود :
[FONT=Tahoma]Dim watcher As New FileSystemWatcher() [/FONT]
[FONT=Tahoma]' monitor files at:
watcher.Path = "c:\" [/FONT]
[FONT=Tahoma]' monitor files when
watcher.NotifyFilter = NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.FileName Or NotifyFilters.DirectoryName [/FONT]
[FONT=Tahoma]' watch files of type
watcher.Filter = "*.txt" [/FONT]
[FONT=Tahoma]' watch events:
AddHandler watcher.Created, AddressOf OnChanged
AddHandler watcher.Deleted, AddressOf OnChanged [/FONT]

[FONT=Tahoma]watcher.EnableRaisingEvents = True
Console.WriteLine("Press 'q' to quit app.") [/FONT]
[FONT=Tahoma]While Console.Read() <> "q"C
[/FONT]
[FONT=Tahoma]End While [/FONT]

كما لاحظت ، عندما يحدث أي حدث فإننا نقوم باستدعاء الدالة OnChanged ، يمكن تخصيص دالة لكل حدث أو كما تحب لكن هذا فقط مثال ، يمكننا كتابة الدالة OnChanged بالشكل التالي مثلاً - عرض الملف والتغيير ووقت التغيير - :
C#:

كود :
[FONT=Tahoma]static void OnChanged(object source, FileSystemEventArgs e)
{
Console.WriteLine("File Changed, File Path: {0} , Change: {1}, DateTime: {2}", e.FullPath, e.ChangeType,DateTime.Now.ToString());
}[/FONT]

vb.net:

كود :
Private Shared Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs)
Console.WriteLine("File Changed, File Path: {0} , Change: {1}, DateTime: {2}", e.FullPath, e.ChangeType, DateTime.Now.ToString())
End Sub

والآن جرب البرنامج ...
الصورة التالية نتاج متوقع لحذف ملف من السي واعادته مرة أخرى ( من السي مباشرة ) :


}}}}
تم الشكر بواسطة:
#2
كنت اود اضافة الجزء الثاني من الدرس عن Isolated Storage ولكني وجدت نفسي غير مهيأ لأن اكتب درساً فيها قبل ان اكون قادراً على استيعابها بصورة كاملة ، لذا التمس منكم العذر ، وأتمنى لو اتحفنا أحد خبراءنا بدرس حول هذا الموضوع .

درسنا القادم إن شاء الله سيكون عن ال Object Serialization والذي آمل انني استطيع البدء فيه قريباً إن شاء الله .

والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الدرس الأول : تحميل .net 2008 ومميزات استخدامه oneyemenweb2 1 672 07-03-13, 02:04 AM
آخر رد: abdoojh
  اعلان - انتهاء الدورة - الدرس التاسع والسبعون -) RaggiTech 0 602 14-10-12, 11:23 PM
آخر رد: RaggiTech
  الدرس الثامن والسبعون - Ajax RaggiTech 2 876 14-10-12, 11:22 PM
آخر رد: RaggiTech
  الدرس السابع والسبعون - ASP.net وقواعد البيانات RaggiTech 2 911 14-10-12, 11:19 PM
آخر رد: RaggiTech
  الدرس السادس والسبعون - ASP.net - الجزء الثالث RaggiTech 7 1,162 14-10-12, 11:14 PM
آخر رد: RaggiTech
  الدرس الخامس والسبعون - ASP.net - الجزء الثاني RaggiTech 5 1,319 14-10-12, 11:07 PM
آخر رد: RaggiTech
  الدرس الرابع والسبعون - ASP.net RaggiTech 6 1,092 14-10-12, 10:58 PM
آخر رد: RaggiTech
  الدرس الثالث والسبعون - مقدمة إلى تطوير المواقع RaggiTech 4 850 14-10-12, 10:44 PM
آخر رد: RaggiTech
  الدرس الثاني والسبعون - مقدمة إلى Mono RaggiTech 0 596 14-10-12, 10:37 PM
آخر رد: RaggiTech
  الدرس الواحد والسبعون - XML Commenting RaggiTech 2 795 14-10-12, 10:35 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم