【C#.NET】监测文件夹里面文件变化情况

如果你看到这段文字,说明您正使用RSS阅读或转自《一棵树-博客园》,原文地址:http://www.cnblogs.com/atree/archive/2011/05/09/net-auto-FileSystemWatcher.html

最近遇到一个项目,在项目之中想监测一个文件夹里面文件的变化情况,另外想做成开机启动,并且能够提醒客户,便于客户做出相应的动作。

在网上搜集了不少的东西,对这个我这个东西起了不少的作用,但是总是零零碎碎的,最后还是跌跌撞撞的写出来了,测试了一下还行,本人本着互联网的互助原则,将这个小东西放在网上,希望能对大家有一个抛砖引玉的作用,同时也希望大家能多提意见!呵呵…转入正题吧。

其实程序的核心类就是.net的一个控件1 ,但是当时没有发现,做完以后有一种被捉弄的感觉,呵呵…大家仅供借鉴!

本人在程序里面没有直接用控件,代码如下:

public static FileSystemWatcher watcher = new FileSystemWatcher();

当然问题的解决这样未免有点太轻松了!接下来就是为对watcher 的事件捕获并进行相应处理,代码如下:

       watcher.Changed += new FileSystemEventHandler(OnChanged);
       watcher.Created += new FileSystemEventHandler(OnChanged);
       watcher.Deleted += new FileSystemEventHandler(OnChanged);
       watcher.Renamed += new RenamedEventHandler(OnRenamed); 

相信看我问东东的同仁们到现在也就知道怎么做了,再次不再赘述。另外就是由于文件夹的检测所以会触及到系统安全,所以在程序之中程序的权限设置就显得很有必要,在程序之中加入下面的代码,能有效地避免程序被误认为是非法操作。

[PermissionSetAttribute(SecurityAction.Demand, Name ="FullTrust")]

到此,整个程序的主要功能更就完了,另外就是一个开机启动的设置和取消,另外就是监测报告!这些问题,开机启动的设置和取消是windows的注册表编程,也就不卖关子了,直接给大家代码吧:

       private void AutoRun_CheckedChanged(object sender, EventArgs e)
       {
           if (AutoRun.Checked)//开机自动启动
           {
               try
               {
                   RegistryKey runKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
                   runKey.SetValue("文件夹监测.exe", System.Windows.Forms.Application.ExecutablePath);
                   runKey.Close();
               }
               catch (IOException)
               {
                   return ;
               }
           } 
           else  //不开机自动启动注册表信息删除
           {
               RegistryKey software = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
               string[] aimnames = software.GetValueNames();           
               foreach (string aimKey in aimnames)
               {
                   if (aimKey.Equals("文件夹监测.exe"))
                   {
                       software.DeleteValue("文件夹监测.exe") ;
                       software.Close();
                       break;
                   }
               }
           }
       }

这些就是开机启动的设置以及取消代码。另外程序可以类似于QQ做消息(文件夹变动消息)提示,当然这些都是一些小把戏,大家应该比我懂得多,我就不献丑了,现在就讲运行的结果展示一下:

这是启动界面:

2

上面是软件的启动界面,当然上面有我的QQ以及邮箱,大家有什么指教的,这些联系方式一般都是可以找到的,除非我睡觉,呵呵…

这是程序的程序开始监测的结果:

3

上面是运行效果,下面是最小化到托盘、以及消息提示如下图展示:

41 红色矩形的就是运行的检测程序.代码程序里面很全面.

监测提示,就不在截图了!要不就太没水准了!呵呵…

评论也给力:

楼主(XAUTIT民工):对上面的东西,我在CSDN里面有下载,点击这个可以下载:http://download.csdn.net/source/3162782
另外大家如果有看不懂得地方,或者有什么指点可以直接直接联系我!对于程序源代码,我暂不提供,相信天道酬勤(反编译!)。

大肚小男人:public static FileSystemWatcher watcher = new FileSystemWatcher();这种定义应该采用弱引用!

 

楼主回复大肚小男人:我是初学者,写的代码的确不很严密,谢谢指点!

ZhangWei:没想到.NET提供了一个这么好的控件,还以为要通过文件系统过滤驱动来实现呢,学习了。

dirichlet:不错,msdn上也有个例子:http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
longware:500的rmvb,8G的mkv,你就挂了,我之前做了一个bakcopy

Crayon:可惜的是,这个FileSystemWatcher 对复制类的,没有监视,所以如果有研究过的,对复制能监视的,可以深入探讨一下

楼主回复Crayon:对复制的监测,转变为文件的创建消息以及文件大小改变的消息!

Crayon:我说的复制,不是改变时间,或者大小,或者访问时间,我说的复制是,我打开这个文件夹,是可以监视到,但是我这个文件夹里面有很多东西,我随便复制一个文件,我就没有办法知道用户复制的是那个文件

转自:http://www.cnblogs.com/wukaibo/archive/2011/04/05/2006179.html

posted on 2011-05-09 00:46  zock  阅读(10283)  评论(0编辑  收藏  举报