C#中FileSystemWatcher控件實現文件監控


FileSystemWatcher

可以使用FileSystemWatcher組件監視文件系統,並對文件系統的改變作出反應。通過使用FileSystemWatcher組件,在特定的文件或目錄被創建、修改或刪除時,可以快速和便捷地啟動業務流程。


例如,如果一組用戶在合作處理一個存儲在服務器共享目錄下的文檔時,可以使用FileSystemWatcher組件編寫應用程序來監視對共享目錄的更改情況。當檢測到更改時,該組件可以運行處理過程,通過電子郵件通知每個用戶。


可以配置組件來監視整個目錄及其內容,或特定目錄下一個特定的文件或一組文件。若要監視所有文件中的更改,應將Filter屬性設置為空字符串("");若要監視特定的文件,應將Filter屬性設置為該文件的文件名(例如,若要監視文件MyDoc.txt中的更改,將Filter屬性設置為"MyDoc.txt");也可以監視特定文件類型中的更改,例如若要監視文本文件中的更改,將Fillter屬性設置為"*.txt"。


【提示】不要忽略隱藏文件。


可監視目錄或文件中的若干種更改。例如,可監視文件或目錄的Attributes、LastWrite的日期和時間或Size的更改。通過將
FileSystemWatcher.NotifyFilter屬性設置為NotifyFilters中的某個值,就可以實現這個目標。


還可以監視文件或目錄的重命名、刪除或創建。例如,若要監視文本文件的重命名,可將Filter屬性設置為"*.txt",並調用一個WaitForChanged方法,並設置該方法中WatcherChangeTypes的值為Renamed。


下面舉例說明。創建一個FileSystemWatche組件來監視運行時指定的目錄。組件被設置用來監視LastWrite和
LastAccess時間的更改,以及目錄中文本文件的創建、刪除或重命名。如果文件被更改、創建或刪除,則文件的路徑就會被輸出到控制台。當一個文件被重命名時,舊的和新的路徑都被輸出到控制台。


【實例7-7】 使用FileSystemWatche組件來監視運行時指定的目錄。

 
 
 
         
  1. using System;
  2. using System.IO;
  3. public class watcher
  4. {
  5. public static void Main(string[] args)
  6. {
  7. //如果沒有指定目錄,則退出程序
  8. if(args.Length!=1)
  9. {
  10. //顯示調用程序的正確方法
  11. Console.WriteLine("usage:Watcher.exe(directory)");
  12. return;
  13. }
  14. //創建一個新的FileSystemWatcher並設置其屬性
  15. FileSystemWatcher watcher=new FileSystemWatcher();
  16. watcher.Path=args[O];
  17. /*監視LastAcceSS和LastWrite時間的更改以及文件或目錄的重命名*/
  18. watcher.NotifyFilter=NotifyFilters.LastAccess | NotifyFilters.LastWrite |
  19. NotifyFilters.FileName | NotifyFilters.DirectoryName;
  20. //只監視文本文件
  21. watcher.Filter="*.txt";
  22. //添加事件句柄
  23. //當由FileSystemWatcher所指定的路徑中的文件或目錄的
  24. //大小、系統屬性、最后寫時間、最后訪問時間或安全權限
  25. //發生更改時,更改事件就會發生
  26. watcher.Changed +=new FileSystemEventHandler(OnChanged);
  27. //由FileSystemWatcher所指定的路徑中文件或目錄被創建時,創建事件就會發生
  28. watcher.Created +=new FileSystemEventHandler(OnChanged);
  29. //當由FileSystemWatcher所指定的路徑中文件或目錄被刪除時,刪除事件就會發生
  30. watcher.Deleted +=new FileSystemEventHandler(OnChanged) ;
  31. //當由FileSystemWatcher所指定的路徑中文件或目錄被重命名時,重命名事件就會發生
  32. watcher.Renamed +=new RenamedEventHandler(OnRenamed);
  33. //開始監視
  34. watcher.EnableRaisingEvents=true;
  35. //等待用戶退出程序
  36. Console.WriteLine("Press\'q\' to quit the sample.");
  37. while(Console.Read()!='q');
  38. }
  39. //定義事件處理程序
  40. public static void OnChanged(object sender,FileSystemEventArgs e)
  41. {
  42. //指定當文件被更改、創建或刪除時要做的事
  43. Console.WriteLine("file:"+e.FullPath+""+e.ChangeType);
  44. }
  45. public static void OnRenamed(object sender,RenamedEventArgs e)
  46. {
  47. //指定當文件被重命名時發生的動作
  48. Console.WriteLine("Fi]e:{0} renamed to{1}",e.OldFullPath,e.FullPath);
  49. }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM