FileSystemWatcher类监控文件的更改状态并且实时备份文件
首先这是我自己在一个任务需求里面所要用到的,大致的代码如下:我把监视文件和备份文件的方法封装到一个WatcherAndBackup
类中了,但是总感觉封装的不是很好,有大牛能够指出改正之处在此留言,谢谢指点了哈!!,主要监视文件用到的类就是在sysytem.IO
里面的FileSystemWatcher,然后在一个控制台里面创建类WatcherAndBackup的实例并且运行就行
- class WatcherAndBackup
- {
- string sourcefile = "";//源文件
- string targetfile = "";//目标文件
- string targetPath = "";//目标路径
- public WatcherAndBackup(string Sourcefile,string Targetfile,string TargetPath)
- {
- sourcefile = Sourcefile;targetfile = Targetfile;targetPath = TargetPath;
- }
- public void backup(string sourcefile,string targetfile,string targetPath)
- {
- try
- {
- if (!Directory.Exists(targetPath))
- {
- Directory.CreateDirectory(targetPath);
- }
- File.Copy(sourcefile, targetfile, true);
- }
- catch { }
- }
- #region 实时监视文件更改并且备份文件
- public void watcherfile(string path,string file)
- {
- FileSystemWatcher fsw = new FileSystemWatcher(path, file);
- fsw.Changed += new FileSystemEventHandler(change_watcher);
- fsw.Created += new FileSystemEventHandler(change_watcher);
- fsw.Deleted += new FileSystemEventHandler(change_watcher);
- fsw.Renamed += new RenamedEventHandler(rename_watcher);
- fsw.EnableRaisingEvents = true;
- Console.WriteLine("开始监视。。。。");
- fsw.NotifyFilter = NotifyFilters.Attributes | NotifyFilters.CreationTime | NotifyFilters.DirectoryName | NotifyFilters.FileName
- | NotifyFilters.LastAccess | NotifyFilters.Security | NotifyFilters.Size | NotifyFilters.LastWrite;
- fsw.IncludeSubdirectories = true;
- }
- public void change_watcher(object sender,FileSystemEventArgs e)
- {
- var wacher = sender as FileSystemWatcher;
- wacher.EnableRaisingEvents = false;
- if (e.ChangeType==WatcherChangeTypes.Changed)
- {
- Console.WriteLine("正在备份。。。");
- backup(sourcefile,targetfile,targetPath);
- Console.WriteLine("备份成功。。。");
- }
- else if (e.ChangeType==WatcherChangeTypes.Created)
- {
- Console.WriteLine("{0},{1},{2}", e.ChangeType, e.FullPath, e.Name);
- return;
- }
- else if (e.ChangeType==WatcherChangeTypes.Deleted)
- {
- Console.WriteLine("{0},{1},{2}", e.ChangeType, e.FullPath, e.Name);
- return;
- }
- wacher.EnableRaisingEvents = true;
- }
- public void rename_watcher(object sender,RenamedEventArgs e)
- {
- Console.WriteLine("{0},{1},{2}", e.ChangeType, e.FullPath, e.Name);
- }
- #endregion
- }
- 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方法,这个修改方法是我在网上找到的一个修改方法
好了,基本也说完了。。。有什么不正确的地方请各位大牛指正,本就打着学习的态度写下的。。嘿嘿!!
FileSystemWatcher类监控文件的更改状态并且实时备份文件的更多相关文章
- C# FileSystemWatcher 在监控文件夹和文件时的用法
概述 最近学习FileSystemWatcher的用法,它主要是监控一个文件夹,当文件夹内的文件要是有更改就要记录下来,我就整理下我对FileSystemWatcher 的理解和用法. FileSys ...
- C#使用FileSystemWatcher来监控指定文件夹,并使用TCP/IP协议通过Socket发送到另外指定文件夹
项目需求: 局域网内有两台电脑,电脑A(Windows系统)主要是负责接收一些文件(远程桌面粘贴.FTP上传.文件夹共享等方式),希望能在A接收文件后自动传输到电脑B(Windows系统)来做一个备份 ...
- 使用FileSystemWatcher监控文件夹及文件
引言 这一周主要精力集中学习一个同事开发的本地文件搜索项目上,其中客户端添加共享文件时主要是使用FileSystemWatcher 监控文件,并在各种事件发生时向服务器发送消息. 解决方法 FileS ...
- 工具类commons-io的Tailer用来监控文件
一.前言:在Linux下有使用tail命令 在Commons-io中也提供这种方法 二.他采用的是线程方式来监控文件内容的变化 1.Tailer类(采用线程的方式进行文件的内容变法) 2.Tailer ...
- 【.Net 学习系列】-- FileSystemWatcher 监控文件夹新生成文件,并在确认文件没有被其他程序占用后将其移动到指定文件夹
监控文件夹测试程序: using System; using System.Collections.Generic; using System.IO; using System.Linq; using ...
- [转帖]Linux下inotify监控文件夹状态,发生变化后触发rsync同步
Linux下inotify监控文件夹状态,发生变化后触发rsync同步 https://www.cnblogs.com/fjping0606/p/6114123.html 1.安装工具--inotif ...
- Windows系统中监控文件复制操作的几种方式
http://blog.sina.com.cn/s/blog_4596beaa0100lp4y.html 1. ICopyHook 作用: 监视文件夹和打印机移动,删除, 重命名, 复制操作. 可以得 ...
- C#监控文件夹变化
当需要监控某一文件,FileSystemWatcher类提供了Created, Deleted,Rename等事件. 就拿FileSystemWatcher的Created事件来说,该事件类型是Fil ...
- Python 的 pyinotify 模块 监控文件夹和文件的变动
官方参考: https://github.com/seb-m/pyinotify/wiki/Events-types https://github.com/seb-m/pyinotify/wiki/I ...
随机推荐
- npm -v;报错 cannot find module "wrapp"
1.node -v正常.npm-v就报错.. 说明:在官网上下载了安装了好几次.一用到npm就报这个错.园友们,我不太懂node,你们遇到这个问题怎么解决的? 2.报错 cannot find mod ...
- 深入理解Postgres中的cache
众所周知,缓存是提高数据库性能的一个重要手段.本文着重讲一讲PostgreSQL中的缓存相关的东西.当然万变不离其宗,原理都是共同的,理解了这些,你也很容易把它运用到其它数据库中. What is a ...
- asp.net core 2.0集成signalr
在博客园也很多年了,一直未曾分享过什么东西,也没有写过博客,但自己也是汲取着博客园的知识成长的: 这两天想着不能这么无私,最近.NET CORE貌似挺流行的,闲来无事也自己搞了个asp.net cor ...
- 照虎画猫写自己的Spring——依赖注入
前言 上篇<照虎画猫写自己的Spring>从无到有讲述并实现了下面几点 声明配置文件,用于声明需要加载使用的类 加载配置文件,读取配置文件 解析配置文件,需要将配置文件中声明的标签转换为F ...
- 大神博客链接系列---C#SubSonic3.0搭建ORM
一.C#框架 C#ORM框架: SubSonic3.0制作ORM--- http://www.cnblogs.com/EmptyFS/p/3659679.html
- 深入了解Android蓝牙Bluetooth——《进阶篇》
在 [深入了解Android蓝牙Bluetooth--<基础篇>](http://blog.csdn.net/androidstarjack/article/details/6046846 ...
- MySQL .msi 安装失败改用.zip安装步骤
一开始官网下载.msi安装包,安装到配置server时无法启动,长时间卡在这里,无法继续下去.上网看了一下解决办法,发现用.zip安装包进行安装比较简单可靠. 一.利用.msi安装包安装失败后的处理 ...
- 十大经典排序算法的JS版
前言 个人博客:Damonare的个人博客 如遇到问题或有更好的优化方法,可以: 提issue给我 或是pull requests 我都会看到并处理,欢迎Star. 这世界上总存在着那么一些看似相似但 ...
- python :ascii codec can't decode byte 0xe8 in posit
python代码: slide.setAttribute("SlideName", module.slide_name) slide.setAttribute("Sli ...
- GDAL编译
使用cmd命令行编译 1.首先在“开始菜单\所有程序\Microsoft Visual Studio 2008\Visual Studio Tools\ Visual Studio 2008命令提示” ...