FileSystemWatcher类监控文件的更改状态并且实时备份文件
首先这是我自己在一个任务需求里面所要用到的,大致的代码如下:我把监视文件和备份文件的方法封装到一个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 }
1 2 3 4 5 6 | 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方法,这个修改方法是我在网上找到的一个修改方法
好了,基本也说完了。。。有什么不正确的地方请各位大牛指正,本就打着学习的态度写下的。。嘿嘿!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本