首先這是我自己在一個任務需求裡面所要用到的,大致的代碼如下:我把監視文件和備份文件的方法封裝到一個WatcherAndBackup 類中了,但是總感覺封裝的不是很好,有大牛能夠指出改正之處在此留言,謝謝指點了哈!!,主要監視文件用到的類就是在sysytem.IO 裡面的FileSystemWatch ...
首先這是我自己在一個任務需求裡面所要用到的,大致的代碼如下:我把監視文件和備份文件的方法封裝到一個WatcherAndBackup
類中了,但是總感覺封裝的不是很好,有大牛能夠指出改正之處在此留言,謝謝指點了哈!!,主要監視文件用到的類就是在sysytem.IO
裡面的FileSystemWatcher,然後在一個控制台裡面創建類WatcherAndBackup的實例並且運行就行
1 class WatcherAndBackup 2 { 3 string sourcefile = "";//源文件 4 string targetfile = "";//目標文件 5 string targetPath = "";//目標路徑 6 public WatcherAndBackup(string Sourcefile,string Targetfile,string TargetPath) 7 { 8 sourcefile = Sourcefile;targetfile = Targetfile;targetPath = TargetPath; 9 } 10 11 public void backup(string sourcefile,string targetfile,string targetPath) 12 { 13 try 14 { 15 if (!Directory.Exists(targetPath)) 16 { 17 Directory.CreateDirectory(targetPath); 18 19 } 20 File.Copy(sourcefile, targetfile, true); 21 22 } 23 catch { } 24 } 25 #region 實時監視文件更改並且備份文件 26 public void watcherfile(string path,string file) 27 { 28 FileSystemWatcher fsw = new FileSystemWatcher(path, file); 29 fsw.Changed += new FileSystemEventHandler(change_watcher); 30 fsw.Created += new FileSystemEventHandler(change_watcher); 31 fsw.Deleted += new FileSystemEventHandler(change_watcher); 32 fsw.Renamed += new RenamedEventHandler(rename_watcher); 33 fsw.EnableRaisingEvents = true; 34 Console.WriteLine("開始監視。。。。"); 35 fsw.NotifyFilter = NotifyFilters.Attributes | NotifyFilters.CreationTime | NotifyFilters.DirectoryName | NotifyFilters.FileName 36 | NotifyFilters.LastAccess | NotifyFilters.Security | NotifyFilters.Size | NotifyFilters.LastWrite; 37 fsw.IncludeSubdirectories = true; 38 } 39 public void change_watcher(object sender,FileSystemEventArgs e) 40 { 41 42 var wacher = sender as FileSystemWatcher; 43 wacher.EnableRaisingEvents = false; 44 45 if (e.ChangeType==WatcherChangeTypes.Changed) 46 { 47 Console.WriteLine("正在備份。。。"); 48 backup(sourcefile,targetfile,targetPath); 49 Console.WriteLine("備份成功。。。"); 50 51 } 52 else if (e.ChangeType==WatcherChangeTypes.Created) 53 { 54 Console.WriteLine("{0},{1},{2}", e.ChangeType, e.FullPath, e.Name); 55 return; 56 } 57 else if (e.ChangeType==WatcherChangeTypes.Deleted) 58 { 59 Console.WriteLine("{0},{1},{2}", e.ChangeType, e.FullPath, e.Name); 60 return; 61 } 62 wacher.EnableRaisingEvents = true; 63 } 64 public void rename_watcher(object sender,RenamedEventArgs e) 65 { 66 Console.WriteLine("{0},{1},{2}", e.ChangeType, e.FullPath, e.Name); 67 } 68 #endregion 69 70 }
static void Main(string[] args) { WatcherAndBackup bk = new WatcherAndBackup(@"D:\gg\config.xml", @"D:\gg\backup\config.xml", @"D:\gg\backup"); bk.watcherfile(@"D:\gg", "config.xml");//監視的文件為D:\gg\config.xml Console.Read(); }
在這裡解釋一下:實例類WatcherAndBackup時分別要寫下backup方法的三個參數:sourcefile、targefile、targePath,也就是備份方法的源文件、目標文件、目標文件的目錄,然後在change_watcher方法當中為什麼會有這幾局代碼:
var wacher=sender as FileSystemWatcher;
wacher.EnableRaisingEvents=false;
然後在方法後面:
wacher.EnableRaisingEvents=true;
其實如果不加入這幾句代碼會出現當監控到文件修改時會觸發兩次changed方法,這個修改方法是我在網上找到的一個修改方法
好了,基本也說完了。。。有什麼不正確的地方請各位大牛指正,本就打著學習的態度寫下的。。嘿嘿!!