C#文件监控

给大家分享一下个人对C#文件监控FileSystemWatcher类的理解和看法。

要学习C#中如何对文件或者文件夹进行监控,只需要了解这个类就可以对文件进行各种增、删、改操作进行监控,他们各自对应了不同的事件。

首先要认识一下FileSystemWatcher类的重要属性:

  • Path:设置你要监控的文件夹路径,注意只能是文件夹哦
  • IncludeSubdirectories:是否要监控目标文件夹的子文件夹,是一个Boolean类型。
  • Filter:这个属性很灵活,你可以设置一个文件名(带后缀),那么就只监控这个文件,你也可以设置一个后缀如:*.txt,它就监控所有txt格式的文件,这个属性很好用,但坑爹的是他只能设置一个值,你不能对他设置两个后缀名的监控。
  • NotifyFilter:这个属性很重要,它是设置监控的类型,是一枚举类型(NotifyFilters),默认值为 LastWriteFileNameDirectoryName 一般设为默认就满足大多数需求,下面是这个枚举每个值所对应的效果:
         NotifyFilters.Attributes:监控对文件的任何修改(修改内容,名称,属性[只读、隐藏、存档])
         NotifyFilters.CreationTime:仅监控创建日期的修改
       NotifyFilters.DirectoryName:监控对文件夹的添加、修改名称、删除,不包括对文件夹属性的更改
       NotifyFilters.FileName:监控对文件的添加、删除、修改名称
       NotifyFilters.LastAccess:仅监控对文件或目录上一次打开日期的修改
       NotifyFilters.LastWrite:仅监控对文件内容的修改
       NotifyFilters.Security:仅监控对文件或文件夹安全设置的更改
       NotifyFilters.Size:监控文件或文件夹大小的改变(文件内容的改变也会触发)
    如果要设置多个值格式如下:new FileSystemWatcher().NotifyFilter=NotifyFilters.Attributes|NotifyFilters.CreationTime;
  • EnableRaisingEvents:设置是否启用监控的Boolean,如果设置成False那么,你的监控事件一个都不会触发。

了解了这些基本的属性大家看一下下面的代码示例基本都了然了:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Collections;
 4 using System.Linq;
 5 using System.Text;
 6 using System.IO;
 7 
 8 namespace File_Monitoring
 9 {
10     /// <summary>
11     /// 文件监控
12     /// </summary>
13     class Program
14     {
15         static void Main(string[] args)
16         {
17             FileSystemWatcher watcher = new FileSystemWatcher();
18 
19             //设置监控路径
20             watcher.Path = "C:\\test";//注意此盘必须存在
21 
22             //NotifyFilters.Attributes:影响对文件的任何修改(修改内容,名称,属性[只读、隐藏、存档])
23             //NotifyFilters.CreationTime:仅影响创建日期的修改
24             //NotifyFilters.DirectoryName:影响对文件夹的添加、修改名称、删除,不包括对文件夹属性的更改
25             //NotifyFilters.FileName:影响对文件的添加、删除、修改名称
26             //NotifyFilters.LastAccess:仅影响对文件或目录上一次打开日期的修改
27             //NotifyFilters.LastWrite:仅影响对文件内容的修改
28             //NotifyFilters.Security:仅影响对文件或文件夹安全设置的更改
29             //NotifyFilters.Size:影响文件或文件夹大小的改变(文件内容的改变也会触发)
30 
31 
32             watcher.NotifyFilter = NotifyFilters.FileName|NotifyFilters.LastWrite|NotifyFilters.DirectoryName;
33 
34             //设置监控子目录
35             watcher.IncludeSubdirectories = true;
36 
37             //设置监控对象类型(只能一种)
38             watcher.Filter = "*";
39 
40             //启用监控
41             watcher.EnableRaisingEvents = true;
42 
43             //新建事件
44             watcher.Created += new FileSystemEventHandler(watcher_Created);
45             //更改事件
46             watcher.Changed += new FileSystemEventHandler(watcher_Changed);
47             //重命名事件
48             watcher.Renamed += new RenamedEventHandler(watcher_Renamed);
49             //删除事件
50             watcher.Deleted += new FileSystemEventHandler(watcher_Deleted);
51             //因为是控制台应用程序所以我让线程休眠一会儿观看效果
52             System.Threading.Thread.Sleep(30000);
53         }
54 
55         static void watcher_Deleted(object sender, FileSystemEventArgs e)
56         {
57             Console.WriteLine("删除");
58         }
59 
60         static void watcher_Renamed(object sender, RenamedEventArgs e)
61         {
62             Console.WriteLine("更改名称");
63         }
64 
65         static void watcher_Changed(object sender, FileSystemEventArgs e)
66         {
67             Console.WriteLine("更改");
68         }
69 
70         static void watcher_Created(object sender, FileSystemEventArgs e)
71         {
72             Console.WriteLine("创建");
73         }
74 
75     }
76 }

上面的代码如果大家想看效果可以修改监控文件夹路径,然后新建一个控制台应用程序,覆盖Program这个类代码运行,你的操作信息将输出到控制台。

好了基本用法就介绍到这里,最后在说明一下,由于文件夹的监控对内存消耗比较大,你可以对InternalBufferSize属性设置缓冲区大小,还可以通过

IncludeSubdirectories、NotifyFilter、Filter这三个属性来控制监控范围,从而减少对内存的消耗。

转载于:https://www.cnblogs.com/J-ieie/archive/2012/10/26/2741921.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值