C#在C#使用文件监控目标FileSystemWatcher 实现数量并

      
最近于档次遭到发出如此个需要,就是得错过实时落有在乱改变的文件文件被的情节。首先想到的是用程序定期去看这文件,因为对实时性要求特别高,间隔不能够跳1S,而且每次取到文本内容还设错过分发给WEB服务器做别的操作,而非常文本的勾勒副闹时光会频繁,1秒可能频,但是呢发或当相当长一段时间内是没有其它写副的。

这样一来如果各级秒都去访问文件的语,一个凡IO问题,还有就是是历次操作都见面唤起后端一系列程序的反射,文本以加上日子内任写副的话语,一秒一糟的触及一多级徒劳的政工太无可取了。

末尾发现了c#惨遭的FileSystemWatcher对象,在运用FileSystemWatcher之前,首先了解一下者目标的基本属性与波,首先普及一下FileSystemWatcher基本知识。

FileSystemWatcher基础

属性:

Path——这个特性告诉FileSystemWatcher它需要监控哪条路。例如,如果我们用这个特性设为“C:\test”,对象就是监控test目录下有文件来的兼具变更(包括去,修改,创建,重命名)。

IncludeSubDirectories——这个特性说明FileSystemWatcher对象是否应监控子目录中(所有文件)发生的反。

Filter——这个特性允许而过滤掉某些项目的公文来的成形。例如,如果我们只是期待在TXT文件为改动/新建/删除时提交通知,可以拿之特性设为“*txt”。在拍卖高流量或特大型目录时,使用这特性很便于。

NotifyFilter——获取或安装要监视的改变项目。可以进一步的过滤而监督的更动项目,如watcher.NotifyFilter
= NotifyFilters.LastAccess | NotifyFilters.LastWrite

| NotifyFilters.FileName |
NotifyFilters.DirectoryName;

事件:

Changed——当让监督的目录中起一个文本给涂改时,就交者事件。值得注意的是,这个波或会见让交给多次,即使文件的始末仅仅有同样宗改成。这是由在保存文件时,文件之别性质为生了转移。

Created——当给监控之目新建一个文件时,就付出者波。如果您计划为此这事件移动新建的波,你必在事件处理器中写副一些错误处理代码,它能够处理当下文件为别进程使的景。之所以要这样做,是以Created事件或以确立文件的历程释放文件前即被交付。如果您无未雨绸缪正确处理这种气象的代码,就可能出现异常。

Deleted——当为监督之目中生一个文书于删去,就交付者事件。

Renamed——当让监督之目中出一个文本于再命名,就交由者波。

流淌:如果您无用EnableRaisingEvents设为真正,系统非会见交到任何一个波。如果偶尔FileSystemWatcher对象似乎无法工作,请首先检查EnableRaisingEvents,确保她于如为真正。

事件处理
当FileSystemWatcher调用一个事件处理器时,它包含两独自变量——一个称为“sender”的目标同一个称作“e”的
FileSystemEventArgs对象。我们感谢兴趣之自变量为FileSystemEventArgs自变量。这个目标被确保含有提交事件之缘故。以下是FileSystemEventArgs对象的有些特性:

属性:
Name——这个特性被要事件给付的公文的称呼。其中并无含文件之门道——只含有使用事件为交给的文本要目录名称。

ChangeType——这是一个WatcherChangeTypes,它指出要提交哪个项目的波。其有效值包括:

Changed

Created

Deleted

Renamed

FullPath——这个特性被涵盖使事件给交付的文本的圆路径,包括文件称以及目录名。

注意:FileSystemEventArgs对象是监督文件夹下产生文件创建、删除、修改时的自变量,如果是重新命名的话语也RenamedEventArgs对象此时除FileSystemEventArgs对象的属性值,多矣一个OldFullPath,为重命名之前的文件称。

上述为FileSystemEventArgs的基本知识,大部分凡是打网上搜找的下一场自己小整理了一晃。

脚为简单用法:

 

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication1
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = @"C:\test";
            watcher.IncludeSubdirectories = true;
            watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
                                   | NotifyFilters.FileName | NotifyFilters.DirectoryName;
            watcher.Filter = "*.txt";

            watcher.Changed += (s,e1)=> this.Dispatcher.Invoke(new Action(() =>
            {
                label1.Content = e1.Name + "被修改!";
            }));
            watcher.Created += (s, e1) =>  this.Dispatcher.Invoke(new Action(() => { label1.Content = e1.Name + "被添加!"; }));
            watcher.Deleted += (s, e1) =>  this.Dispatcher.Invoke(new Action(() => { label1.Content = e1.Name + "被删除!"; }));
            watcher.Renamed += (s, e1) =>  this.Dispatcher.Invoke(new Action(() =>
            {
                label1.Content = e1.OldName + "被重命名为:"+e1.Name;
            }));

            //开始监视
            watcher.EnableRaisingEvents = true;
        }
    }
}

 

 

 

相关文章