C#监控文件夹FileSystemWatcher


  C#监控文件夹FileSystemWatcher
概述

最近学习FileSystemWatcher的用法,它主要是监控一个文件夹,当文件夹内的文件要是有更改就要记录下来,我就整理下我对FileSystemWatcher 的理解和用法.

FileSystemWatcher 用法

在应用FileSystemWatcher对象之前,你必须了解这个对象的一些基本属性和事件。毫无疑问,这个对象的最重要的属性为“EnableRaisingEvents”属性。

这个属性决定对象在收到改变通知时是否提交事件。如果EnableRaisingEvents属性设为假,对象将不会提交改变事件。如果设为真,它将提交改变事件。下面是你在应用FileSystemWatcher对象时将要用到的其它一些重要属性/事件:

属性:

Path——这个属性告诉FileSystemWatcher它需要监控哪条路径。例如,如果我们将这个属性设为“C:Temp”,对象就监控那个目录发生的所有改变。 
IncludeSubDirectories——这个属性说明FileSystemWatcher对象是否应该监控子目录中发生的改变。 
Filter——这个属性允许你过滤掉某些类型的文件发生的变化。例如,如果我们只希望在TXT文件被修改/新建/删除时提交通知,可以将这个属性设为“*txt”。在处理高流量或大型目录时,使用这个属性非常方便。 
事件

Changed——当被监控的目录中有一个文件被修改时,就提交这个事件。值得注意的是,这个事件可能会被提交多次,即使文件的内容仅仅发生一项改变。这是由于在保存文件时,文件的其它属性也发生了改变。 
Created——当被监控的目录新建一个文件时,就提交这个事件。如果你计划用这个事件移动新建的事件,你必须在事件处理器中写入一些错误处理代码,它能处理当前文件被其它进程使用的情况。之所以要这样做,是因为Created事件可能在建立文件的进程释放文件之前就被提交。如果你没有准备正确处理这种情况的代码,就可能出现异常。 
Deleted——当被监控的目录中有一个文件被删除,就提交这个事件。 
Renamed——当被监控的目录中有一个文件被重命名,就提交这个事件。 
注:如果你没有将EnableRaisingEvents设为真,系统不会提交任何一个事件。如果有时FileSystemWatcher对象似乎无法工作,请首先检查EnableRaisingEvents,确保它被设为真。

事件处理

当FileSystemWatcher调用一个事件处理器时,它包含两个自变量——一个叫做“sender”的对象和一个叫做“e”的FileSystemEventArgs对象。我们感兴趣的自变量为FileSystemEventArgs自变量。这个对象中包含有提交事件的原因。以下是FileSystemEventArgs对象的一些属性:

属性:

Name——这个属性中使事件被提交的文件的名称。其中并不包含文件的路径——只包含使用事件被提交的文件或目录名称。 
ChangeType——这是一个WatcherChangeTypes,它指出要提交哪个类型的事件。其有效值包括:Changed、Created、Deleted、Renamed 
FullPath——这个属性中包含使事件被提交的文件的完整路径,包括文件名和目录名。

FileSystemWatcher对象为你完成目录监控工作。如果新建、更新或删除一个文件,FileSystemWatcher将提交一个事件,通知你发生了一项改变。这样,新建一个文件后,你的程序立即就知道可以使用这个文件。立即通知改变使得你的系统以更高的效率工作,因为你不能总是“调查”目录中发生的改变,而且在两次目录扫描之间也不会有时间流失。



C# Code:

class Program
{
   static void Main(string[] args)
   {
      WatcherStrat(@"D:\spring\Program", "*.*");
      Console.ReadKey();
      
   }
   
   private static void WatcherStrat(string path, string filter)
   {
      
      FileSystemWatcher watcher = new FileSystemWatcher();
      watcher.Path = path;
      watcher.Filter = filter;
      watcher.Changed += new FileSystemEventHandler(OnProcess);
      watcher.Created += new FileSystemEventHandler(OnProcess);
      watcher.Deleted += new FileSystemEventHandler(OnProcess);
      watcher.Renamed += new RenamedEventHandler(OnRenamed);
      watcher.EnableRaisingEvents = true;
      watcher.NotifyFilter = NotifyFilters.Attributes | NotifyFilters.CreationTime | NotifyFilters.DirectoryName | NotifyFilters.FileName | NotifyFilters.LastAccess
      | NotifyFilters.LastWrite | NotifyFilters.Security | NotifyFilters.Size;
      watcher.IncludeSubdirectories = true;
   }
   
   private static void OnProcess(object source, FileSystemEventArgs e)
   {
      if (e.ChangeType == WatcherChangeTypes.Created)
      {
         OnCreated(source, e);
      }
      else if (e.ChangeType == WatcherChangeTypes.Changed)
      {
         OnChanged(source, e);
      }
      else if (e.ChangeType == WatcherChangeTypes.Deleted)
      {
         OnDeleted(source, e);
      }
      
   }
   private static void OnCreated(object source, FileSystemEventArgs e)
   {
      Console.WriteLine("文件新建事件处理逻辑 {0} {1} {2}", e.ChangeType, e.FullPath, e.Name);
   }
   private static void OnChanged(object source, FileSystemEventArgs e)
   {
      Console.WriteLine("文件改变事件处理逻辑{0} {1} {2}", e.ChangeType, e.FullPath, e.Name);
   }
   
   private static void OnDeleted(object source, FileSystemEventArgs e)
   {
      Console.WriteLine("文件删除事件处理逻辑{0} {1} {2}", e.ChangeType, e.FullPath, e.Name);
   }
   
   private static void OnRenamed(object source, RenamedEventArgs e)
   {
      Console.WriteLine("文件重命名事件处理逻辑{0} {1} {2}", e.ChangeType, e.FullPath, e.Name);
   }
}

//来源:C/S框架网(www.csframework.com) QQ:23404761





贴图图片
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:SQL2008多个查询条件分页查询脚本(原创)
下一篇:C# WebAPI开发平台与C# WebAPI开发框架
评论列表

发表评论

评论内容
昵称:
关联文章

C#监控文件夹FileSystemWatcher
FileSystemWatcher监控文件的更改状态并且实时备份文件
无线监控系统之二-------C#实现
C#监控CD-ROM插入/弹出光盘(CDROM_Listener)
[原创]无线监控系统之二-------C#实现(续)
读取一个文件夹下所有的txt文件,并保存到一个txt文本中
MES - 煤矿智能化综合防尘监测监控系统平台
WinFramework轻量级开发框架 - 煤矿智能化综合防尘监测监控系统平台
IE浏览器监控程序-监控IE窗体URL动态加载网页等信息
无线监控系统之四-------结言
无线监控系统之一-------UML设计
无线监控系统之三-------测试与扩展
软件开发与设计 - MIS-管理信息系统(监控类数据库设计)
软件开发与设计 - MIS-管理信息系统--地下水监控管理信息系统
软件开发与设计 - MIS-管理信息系统-财政资金监控管理系统
VSCode配置C#运行环境教程,vscode配置c#
C# 读取资源文件 GetManifestResourceStream
C# .NET 入门概念与知识点总结
C#调用C++编译的DLL详解
C# 搭建一个简单的WebApi项目,c# webapi

热门标签
.NET5 .NET6 .NET7 APP Auth-软件授权注册系统 Axios B/S B/S开发框架 Bug Bug记录 C#加密解密 C#源码 C/S CHATGPT CMS系统 CodeGenerator CSFramework.DB CSFramework.EF CSFrameworkV1学习版 CSFrameworkV2标准版 CSFrameworkV3高级版 CSFrameworkV4企业版 CSFrameworkV5旗舰版 CSFrameworkV6.0 DAL数据访问层 Database datalock DbFramework Demo教学 Demo下载 DevExpress教程 DOM EF框架 Element-UI EntityFramework ERP ES6 Excel FastReport GIT HR IDatabase IIS JavaScript LINQ MES MiniFramework MIS NavBarControl Node.JS NPM OMS ORM PaaS POS Promise API Redis SAP SEO SQL SQLConnector TMS系统 Token令牌 VS2022 VSCode VUE WCF WebApi WebApi NETCore WebApi框架 WEB开发框架 Windows服务 Winform 开发框架 Winform 开发平台 WinFramework Workflow工作流 Workflow流程引擎 版本区别 报表 踩坑日记 操作手册 代码生成器 迭代开发记录 基础资料窗体 架构设计 角色权限 开发sce 开发技巧 开发教程 开发框架 开发平台 开发指南 客户案例 快速搭站系统 快速开发平台 秘钥 密钥 权限设计 软件报价 软件测试报告 软件简介 软件开发框架 软件开发平台 软件开发文档 软件体系架构 软件下载 软著证书 三层架构 设计模式 生成代码 实用小技巧 收钱音箱 数据锁 数据同步 微信小程序 未解决问题 文档下载 喜鹊ERP 喜鹊软件 系统对接 详细设计说明书 行政区域数据库 需求分析 疑难杂症 蝇量级框架 蝇量框架 用户管理 用户开发手册 用户控件 在线支付 纸箱ERP 智能语音收款机 自定义窗体 自定义组件 自动升级程序