模擬一下如何去監視指定的目錄的變動。
1、通過Timer來間隔檢測文件夾中的變動,主要是對最後時間進行判斷。?
2、能否基於系統提供的Api或類庫來實現監視
顯然,對於第一種方案是很不科學,也很不好把控的。如果用timer那麼將會占用過多的資源,同時對於變動不能很明確的定位,在過深層級下的文件變動通過這種方式將很難遍歷到,即便能夠遍歷到則其中的遍歷也會增加系統的復雜度。
然而在Net提供的類中有一個System.IO.FileSystemWatcher 通過命名就可以看出其功效——監視者。於是按照自己的思路進行Demo的編寫。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace FileWatch
{
class Program
{
static void Main(string[] args)
{
//用於輸入需要監聽的路徑 例如 c:
string s = Console.ReadLine();
new FileWatchClass(s);
Console.ReadKey();
}
}
class FileWatchClass
{
System.IO.FileSystemWatcher FileWatcher = new FileSystemWatcher ();
public FileWatchClass(string WatcherPath)
{
FileWatcher.Filter = "*.*"; //設定監聽的文件類型
FileWatcher.Path = WatcherPath; //設定監聽的目錄
FileWatcher.Changed += new FileSystemEventHandler(FileWatcher_Changed); //Changed 事件處理
FileWatcher.Renamed += new RenamedEventHandler(FileWatcher_Renamed);//Renamed事件處理
FileWatcher.Created += new FileSystemEventHandler(FileWatcher_Created);//Created事件處理
FileWatcher.Deleted += new FileSystemEventHandler(FileWatcher_Deleted);//Deleted事件處理
FileWatcher.IncludeSubdirectories = true;//設置監聽子目錄