侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件。以下摘自MSDN

使用 FileSystemWatcher 监视指定目录中的更改。可监视指定目录中的文件或子目录的更改。可以创建一个组件来监视本地计算机、网络驱动器或远程计算机上的文件。

若要监视所有文件中的更改,请将 Filter 属性设置为空字符串 ("") 或使用通配符(“*.*”)。若要监视特定的文件,请将 Filter 属性设置为该文件名。例如,若要监视文件 MyDoc.txt 中的更改,请将 Filter 属性设置为“MyDoc.txt”。也可以监视特定类型文件中的更改。例如,若要监视文本文件中的更改,请将 Filter 属性设置为“*.txt”。

可监视目录或文件中的若干种更改。例如,可监视文件或目录的 AttributesLastWrite 日期和时间或 Size 方面的更改。通过将 NotifyFilter 属性设置为 NotifyFilters 值之一来达到此目的。有关可监视的更改类型的更多信息,请参见 NotifyFilters。

可监视文件或目录的重命名、删除或创建。例如,若要监视文本文件的重命名,请将 Filter 属性设置为“*.txt”,并使用为其参数指定的 Renamed 来调用 WaitForChanged 方法。

Windows 操作系统在 FileSystemWatcher 创建的缓冲区中通知组件文件发生更改。如果短时间内有很多更改,则缓冲区可能会溢出。这将导致组件失去对目录更改的跟踪,并且它将只提供一般性通知。使用 InternalBufferSize 属性来增加缓冲区大小的开销较大,因为它来自无法换出到磁盘的非页面内存,所以应确保缓冲区大小适中(尽量小,但也要有足够大小以便不会丢失任何文件更改事件)。若要避免缓冲区溢出,请使用 NotifyFilter 和 IncludeSubdirectories 属性,以便可以筛选掉不想要的更改通知。

有关 FileSystemWatcher 的实例的初始属性值列表,请参见 FileSystemWatcher 构造函数。

使用 FileSystemWatcher 类时,请注意以下事项。

  • 不忽略隐藏文件。

  • 在某些系统中,FileSystemWatcher 使用 8.3 短文件名格式报告文件更改。例如,对“LongFileName.LongExtension”的更改可能报告为“LongFi~.Lon”。

  • 此类在类级别上包含一个链接要求和一个继承要求,两个要求应用于所有成员。如果直接调用方或派生类不具有完全信任权限,则会引发 SecurityException。有关安全要求的详细信息,请参见 链接要求。

复制和移动文件夹

操作系统和 FileSystemWatcher 对象将剪切和粘贴操作或移动操作解释为对文件夹及其内容的重命名操作。如果将包含文件的文件夹剪切并粘贴到受监视的文件夹中,则 FileSystemWatcher 对象仅将文件夹报告为新建,但不能将其内容报告为新建,因为实际上只是对它们进行了重命名。

若要接收已将文件夹内容移动或复制到受监视的文件夹中的通知,请根据下表中的建议提供 OnChanged 和 OnRenamed 事件处理程序方法。

事件处理程序

已处理的事件

执行

OnChanged

Changed, Created, Deleted

报告文件属性的更改、创建的文件和删除的文件。

OnRenamed

Renamed

列出重命名的文件和文件夹的新旧路径,需要时可以递归扩展。

事件和缓冲区大小

请注意,有几个因素可能影响引发哪些文件系统更改事件,如下所述:

  • 公共文件系统操作可能会引发多个事件。例如,将文件从一个目录移到另一个目录时,可能会引发若干 OnChanged 以及一些 OnCreated 和 OnDeleted 事件。移动文件是一个包含多个简单操作的复杂操作,因此会引发多个事件。同样,有些应用程序(例如,防病毒软件)可能会导致可由 FileSystemWatcher 检测到的其他文件系统事件。

  • 只要磁盘没有切换或移除,FileSystemWatcher 就可监视它们。因为 CD 和 DVD 的时间戳和属性不能更改,所以 FileSystemWatcher 不为 CD 和 DVD 引发事件。要使该组件正常运行,远程计算机必须具有所需的这些平台之一。

  • 在 Windows XP(Service Pack 1 之前版本)或者 Windows 2000 SP2 或更低版本中,如果多个 FileSystemWatcher 对象正在监视同一个 UNC 路径,则只有其中一个对象会引发事件。在运行 Windows XP SP1 及之后版本、Windows 2000 SP3 或之后版本或者 Windows Server 2003 的计算机上,所有 FileSystemWatcher 对象都将引发相应的事件。

  • 设置 Filter 不会减少进入缓冲区中的内容。

请注意,由于 Windows 操作系统的依赖项,当丢失某个事件或超出缓冲区大小时,FileSystemWatcher 不会引发 Error 事件。若要防止丢失事件,请遵从这些准则:

  • 使用 InternalBufferSize 属性增加缓冲区大小可以防止丢失文件系统更改事件。

  • 避免监视带有长文件名的文件。考虑使用较短的名称进行重命名。

  • 尽可能使事件处理代码短小。

例如,如果一组用户在合作处理一个存储在服务器共享目录下的文档时,可以使用FileSystemWatcher组件编写应用程序来监视对共享目录的更改情况。当检测到更改时,该组件可以运行处理过程,通过电子邮件通知每个用户。

可以配置组件来监视整个目录及其内容,或特定目录下一个特定的文件或一组文件。若要监视所有文件中的更改,应将Filter属性设置为空字符串("");若要监视特定的文件,应将Filter属性设置为该文件的文件名(例如,若要监视文件MyDoc.txt中的更改,将Filter属性设置为"MyDoc.txt");也可以监视特定文件类型中的更改,例如若要监视文本文件中的更改,将Fillter属性设置为"*.txt"。

【提示】不要忽略隐藏文件。

可监视目录或文件中的若干种更改。例如,可监视文件或目录的Attributes、LastWrite的日期和时间或Size的更改。通过将 FileSystemWatcher.NotifyFilter属性设置为NotifyFilters中的某个值,就可以实现这个目标。

还可以监视文件或目录的重命名、删除或创建。例如,若要监视文本文件的重命名,可将Filter属性设置为"*.txt",并调用一个WaitForChanged方法,并设置该方法中WatcherChangeTypes的值为Renamed。

下面举例说明。创建一个FileSystemWatche组件来监视运行时指定的目录。组件被设置用来监视LastWrite和 LastAccess时间的更改,以及目录中文本文件的创建、删除或重命名。如果文件被更改、创建或删除,则文件的路径就会被输出到控制台。当一个文件被重命名时,旧的和新的路径都被输出到控制台。

 
  1. using System;
  2. using System.IO;
  3. public class watcher
  4. {
  5. public static void Main(string[] args)
  6. {
  7. //如果没有指定目录,则退出程序
  8. if(args.Length!=1)
  9. {
  10. //显示调用程序的正确方法
  11. Console.WriteLine("usage:Watcher.exe(directory)");
  12. return;
  13. }
  14. //创建一个新的FileSystemWatcher并设置其属性
  15. FileSystemWatcher watcher=new FileSystemWatcher();
  16. watcher.Path=args[O];
  17. /*监视LastAcceSS和LastWrite时间的更改以及文件或目录的重命名*/
  18. watcher.NotifyFilter=NotifyFilters.LastAccess | NotifyFilters.LastWrite |
  19. NotifyFilters.FileName | NotifyFilters.DirectoryName;
  20. //只监视文本文件
  21. watcher.Filter="*.txt";
  22. //添加事件句柄
  23. //当由FileSystemWatcher所指定的路径中的文件或目录的
  24. //大小、系统属性、最后写时间、最后访问时间或安全权限
  25. //发生更改时,更改事件就会发生
  26. watcher.Changed +=new FileSystemEventHandler(OnChanged);
  27. //由FileSystemWatcher所指定的路径中文件或目录被创建时,创建事件就会发生
  28. watcher.Created +=new FileSystemEventHandler(OnChanged);
  29. //当由FileSystemWatcher所指定的路径中文件或目录被删除时,删除事件就会发生
  30. watcher.Deleted +=new FileSystemEventHandler(OnChanged) ;
  31. //当由FileSystemWatcher所指定的路径中文件或目录被重命名时,重命名事件就会发生
  32. watcher.Renamed +=new RenamedEventHandler(OnRenamed);
  33. //开始监视
  34. watcher.EnableRaisingEvents=true;
  35. //等待用户退出程序
  36. Console.WriteLine("Press/'q/' to quit the sample.");
  37. while(Console.Read()!='q');
  38. }
  39. //定义事件处理程序
  40. public static void OnChanged(object sender,FileSystemEventArgs e)
  41. {
  42. //指定当文件被更改、创建或删除时要做的事
  43. Console.WriteLine("file:"+e.FullPath+""+e.ChangeType);
  44. }
  45. public static void OnRenamed(object sender,RenamedEventArgs e)
  46. {
  47. //指定当文件被重命名时发生的动作
  48. Console.WriteLine("Fi]e:{0} renamed to{1}",e.OldFullPath,e.FullPath);
  49. }

System.IO.FileSystemWatcher 类相关推荐

  1. 服务器 网络文件夹,System.IO.FileSystemWatcher监视网络服务器文件夹 - 性能注意事项(Sys...

    我想看更改网络服务器上的文件夹树. 这些文件都具有特定的扩展. 有树约200文件夹和带我看的延长约1200文件. 我不能写一个服务,在服务器上运行(禁地!),所以解决方案必须是本地的客户端. 及时性不 ...

  2. System.IO.FileSystemWatcher的坑

  3. 关于FileSystemWatcher类

    类:System.IO.FileSystemWatcher 首次接触到这个类是在这样的一个用户需求中: 当时需要用一个路径导入资料进DB,导入成功后清除文件:本来新建了一个测试的文件夹,但是文件进来的 ...

  4. C#命名空间 System.IO思维导图

    C#命名空间 System.IO思维导图 #mermaid-svg-43CMmjO0R5l1qNrR {font-family:"trebuchet ms",verdana,ari ...

  5. 如何使用 System.IO 和 Visual C# 读取文本文件

    本文分步介绍了如何从文本文件 (.txt) 检索信息,然后使用 ArrayList 类向用户显示该信息. 回到顶端 要求 Microsoft Visual C# 2005 或 Microsoft Vi ...

  6. 使用WinAPI替代System.IO.Directory

    目录 介绍 使用代码 代码如何运作 下载源代码 - 22.6 KB 介绍 最近,我正在做一个需要读取Windows目录内容的项目,所以我使用了.NET提供的System.IO.Directory类中的 ...

  7. C# FileInfo(System.IO)

    环境:Visual Studio 2017,.NET Framework 4.0 本文参考MSDN : https://docs.microsoft.com/zh-cn/dotnet/api/syst ...

  8. FileSystemWatcher 类

    命名空间: System.IO 程序集: System.IO.FileSystem.Watcher.dll, System.dll, netstandard.dll 侦听文件系统更改通知,并在目录或目 ...

  9. C# 使用FileSystemWatcher类来对一个日志文件的变化进行实时监测

    C# 使用FileSystemWatcher类来对一个日志文件的变化进行实时监测 应用场景描述:在我的工作中,遇到这么一个情况,有一个没有源码的程序A,用来读取设备的状态信息,然后将这个状态信息写入一 ...

最新文章

  1. 深度丨机器人会伤害你?科学家做了实验并回答了七个问题
  2. class没有发布到tomcat_Java 类在 Tomcat 中是如何加载的?
  3. RandomStringUtils的使用
  4. java 解密后为空_java RSA加密解密
  5. 转载 - Linux 磁盘挂载
  6. 搜索一个问题 C、C++判断操作系统 是 Linux还是windows 还是Unix【编译器内置宏 探索(不是特别满意)】...
  7. 大数据开发笔记(十):Hbase实践
  8. iOS端im实时音视频功能快速开发实操指导!
  9. java基于ssm+mysql的宠物店管理系统 计算机毕业设计
  10. 微信小程序与webview H5交互(内嵌H5跳转原生页面)
  11. 现货期货价格关系(现货期货价格关系分析)
  12. vue实例中调用外部js_js文件中引用vue实例对象
  13. 如何让一个内向的人锻炼与人交流能力?
  14. java实现斗地主洗牌发牌功能
  15. 【读书笔记】《利用Python进行数据分析》第2版_第六章 数据载入、存储及文件格式
  16. html制作字符批量替换工具,字符批量替换工具
  17. 汇编语言程序设计实验报告一
  18. 连接并查询Access2003数据库
  19. tcping计算机端口,TCPing 服务器端口测试,端口阻断检测
  20. 微信H5授权登录PHP版本

热门文章

  1. 书蕴——基于书评的人工智能推荐系统
  2. 针对L型区域的椭圆方程的差分法
  3. js截取数组slice() 和 splice() 的用法
  4. mysql 日期group_MySql 使用GROUP BY 按照日期分组统计
  5. SpringMVC @GetMapping注解路径冲突问题
  6. Can not issue executeUpdate() for SELECTs
  7. 中科柏诚与知名上市公司南天信息(000948)签署战略合作协议
  8. java 给word加水印,Java 实现在线给word 文档添加水印
  9. arcgis怎么压缩tif文件_使用gdal压缩tif文件
  10. 18. 图像分类、分割