首页
学习
活动
专区
圈层
工具
发布

FileSystemWatcher已更改事件引发两次

FileSystemWatcher 已更改事件引发两次的原因及解决方法

基础概念

FileSystemWatcher 是 .NET Framework 中的一个类,用于监视文件系统中的更改。它可以监视目录或文件的创建、更改、删除和重命名操作。

相关优势

  • 实时监控:能够实时监控文件系统的变化。
  • 事件驱动:通过事件通知应用程序文件系统的变化,便于实时处理。
  • 灵活性:可以监视特定的文件类型或目录。

类型

  • Changed:文件或目录的内容发生更改。
  • Created:文件或目录被创建。
  • Deleted:文件或目录被删除。
  • Renamed:文件或目录被重命名。

应用场景

  • 日志监控:监控日志文件的变化,实时处理日志数据。
  • 文件同步:监控文件变化,进行文件同步操作。
  • 备份系统:监控文件变化,触发备份操作。

问题原因

FileSystemWatcher 已更改事件引发两次的原因可能有以下几种:

  1. 事件重复订阅:同一个事件被多次订阅。
  2. 文件系统缓存:文件系统的缓存机制可能导致事件被触发两次。
  3. 多线程问题:在多线程环境下,事件处理可能被重复触发。

解决方法

  1. 检查事件订阅:确保每个事件只被订阅一次。
  2. 检查事件订阅:确保每个事件只被订阅一次。
  3. 禁用文件系统缓存:通过设置 NotifyFilter 属性来禁用文件系统缓存。
  4. 禁用文件系统缓存:通过设置 NotifyFilter 属性来禁用文件系统缓存。
  5. 处理事件逻辑:在事件处理程序中添加逻辑,确保事件只被处理一次。
  6. 处理事件逻辑:在事件处理程序中添加逻辑,确保事件只被处理一次。
  7. 使用锁机制:在多线程环境下,使用锁机制确保事件处理程序只被执行一次。
  8. 使用锁机制:在多线程环境下,使用锁机制确保事件处理程序只被执行一次。

参考链接

通过以上方法,可以有效解决 FileSystemWatcher 已更改事件引发两次的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

FileSystemWatcher 监视指定目录中的变更

.Net框架类库中的FileSystemWatcher如它的名称一样是一个用于监视文件系统变化的一个控件。使用 FileSystemWatcher 监视指定目录中的更改。...下面的示例使用FileSystemWatcher监视当前应用程序下的所有.txt文本文件的变更: //定义FileSystemWatcher对象         FileSystemWatcher fsw...Application.StartupPath;             //确定在目录中监视所有的.txt文件             fsw.Filter = "*.txt";             //监视的目录中创建文件或目录时引发的事件...            fsw.Created += new FileSystemEventHandler(fsw_Created);             //监视的目录中删除文件或目录时引发的事件...            fsw.Deleted += new FileSystemEventHandler(fsw_Deleted);             //监视的目录中改变文件或目录时引发的事件

75830
  • 利用 C# 中的 FileSystemWatcher 制作一个文件夹监控小工具

    目前该工具已制作完成,故发文分享给大家。 功能比较简单,运行程序后,点击 “选择文件夹” 按钮选择想要监控的文件夹,然后点击 “开始监控文件变动” 即可。...= true; await ConfirmBoxHelper.ShowMessage(DialogVm, $" 已开启监控:[{Configs.FolderPath}]"); } private...(e.FullPath)} 更改】{GetPath(e)}"); } private void FileSystemWatcher_Created(object sender, FileSystemEventArgs...然后就是主要的四个事件,增、删、改、重命名,分别指定好回调方法: _FileSystemWatcher.Created += FileSystemWatcher_Created; _FileSystemWatcher.Renamed...+= FileSystemWatcher_Changed; 还有一点就是,其它事件的参数都是 FileSystemEventArgs 类型,而重命名事件的独有参数是 RenamedEventArgs

    1K10

    .NETC# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)

    比如我正在使用 FileSystemWatcher 来监听一个文件的改变,我可能会使用到这些事件: Created 在文件被创建时引发 Changed 在文件内容或属性发生改变时引发 Renamed 在文件被重命名时引发...Deleted 在文件被删除时引发 更具体一点的代码是这样的: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public class WalterlvDemo...FileSystemWatcherWeakEventRelay,即专门为 FileSystemWatcher 做的弱事件中继。...带上的泛型参数表明是针对 FileSystemWatcher 类型做弱事件中继。...其中 Changed 是 FileSystemWatcher 中的事件,OnChanged 是我们即将定义的事件处理函数,_changed 是前面定义好的弱事件字段,而后面的 value 和 value.Invoke

    23830

    C# FileSystemWatcher文件监控实例

    例如,如果一组用户在合作处理一个存储在服务器共享目录下的文档时,可以使用FileSystemWatcher组件编写应用程序来监视对共享目录的更改情况。...//当由FileSystemWatcher所指定的路径中的文件或目录的 //大小、系统属性、最后写时间、最后访问时间或安全权限 //发生更改时,更改事件就会发生 watcher.Changed...+=new FileSystemEventHandler(OnChanged); //由FileSystemWatcher所指定的路径中文件或目录被创建时,创建事件就会发生 watcher.Created...+=new FileSystemEventHandler(OnChanged); //当由FileSystemWatcher所指定的路径中文件或目录被删除时,删除事件就会发生 watcher.Deleted...+=new FileSystemEventHandler(OnChanged) ; //当由FileSystemWatcher所指定的路径中文件或目录被重命名时,重命名事件就会发生 watcher.Renamed

    1.5K20

    C# FileSystemWatcher文件监控实例

    例如,如果一组用户在合作处理一个存储在服务器共享目录下的文档时,可以使用FileSystemWatcher组件编写应用程序来监视对共享目录的更改情况。...//当由FileSystemWatcher所指定的路径中的文件或目录的 //大小、系统属性、最后写时间、最后访问时间或安全权限 //发生更改时,更改事件就会发生 watcher.Changed...+=new FileSystemEventHandler(OnChanged); //由FileSystemWatcher所指定的路径中文件或目录被创建时,创建事件就会发生 watcher.Created...+=new FileSystemEventHandler(OnChanged); //当由FileSystemWatcher所指定的路径中文件或目录被删除时,删除事件就会发生 watcher.Deleted...+=new FileSystemEventHandler(OnChanged) ; //当由FileSystemWatcher所指定的路径中文件或目录被重命名时,重命名事件就会发生 watcher.Renamed

    67810

    使用FileSystemWatcher监视文件变化

    NotifyFilter——获取或设置要监视的更改类型。...可以进一步的过滤要监控的更改类型,如watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite            ...如果你计划用这个事件移动新建的事件,你必须在事件处理器中写入一些错误处理代码,它能处理当前文件被其它进程使用的情况。之所以要这样做,是因为Created事件可能在建立文件的进程释放文件之前就被提交。...Deleted——当被监控的目录中有一个文件被删除,就提交这个事件。     Renamed——当被监控的目录中有一个文件被重命名,就提交这个事件。 ...解决方法:   针对上面的问题,于是写了一个可以延迟FileSystemWatcher发出的事件的Class DelayFileSystemWatcher。

    1.1K10

    .NET 设计一套高性能的弱事件机制

    事件源(也就是在使用弱事件机制之前最原始的事件引发者,经常以 object sender 的形式出现在你的代码中) 要订阅的事件(比如 FileSystemWatcher.Changed 事件) 新注册的事件处理函数...与此同时也注定了 OnChanged 必须由业务开发者编写(因为无法写出通用的高性能的事件处理函数,并且还能在 += 和 -= 的时候保持同一个实例。 二 我没有办法通过抽象的办法引发一个事件。...-= OnChanged, value); } private void OnChanged(object sender, FileSystemEventArgs e) => /* 引发弱事件...方案完善 我们还需要能够注册、注销和引发弱事件,而这部分就没那么坑了。...> { public FileSystemWatcherWeakEventRelay(FileSystemWatcher eventSource) : base(eventSource

    30120

    FileSystemWatcher 导致Mono ASP.NET应用程序CPU使用率比较高

    大家都知道ASP.NET 网站应用程序(WebSite)可以自动检测到你的ASP.NET应用的文件修改,其中要使用到的就是监视磁盘上的文件/目录的更改,以便应用程序可以采取它认为必要文件创建/删除/修改事件的反应中的任何步骤的...FileSystemWatcher 类。...由于应用程序可能 (和在 ASP.NET 的情况下有时不会)递归查看目录,它可能会非常昂贵的情况,需要检查更改为一大组的文件。...每个运行的变化检测需要检查文件/目录是否存在 (以防托管观察程序这些都是两个 stat (2) 调用),然后检查更改的文件元数据 (大小、 修改时间等),生成一个事件。...state - FileSystemWatcher

    1.4K100

    C#.NET 当我们在写事件 += 和 -= 的时候,方法是如何转换成事件处理器的

    当我们在写 += 和 -= 事件的时候,我们会在 += 或 -= 的右边写上事件处理函数。我们可以写很多种不同的事件处理函数的形式,那么这些形式都是一样的吗?如果你不注意,可能出现内存泄漏问题。...---- 典型的事件处理函数 事件处理函数本质上是一个委托,比如 FileSystemWatcher 的 Changed 事件是这样定义的: 1 2 // 这是简化的代码。...watcher.Changed += (sender, e) => { // 事件引发时,代码会在这里执行。 }; 1 2 3 4 5 // 匿名方法。...watcher.Changed += delegate (object sender, FileSystemEventArgs e) { // 事件引发时,代码会在这里执行。...1 2 3 4 5 6 7 8 9 void Subscribe(FileSystemWatcher watcher) { watcher.Changed += new FileSystemEventHandler

    45030

    使用devtools导致的类型转换异常及Spring Devtools 源码初步解析

    1遇到的问题 SpringBoot项目中的热部署引发的血的教训,报错代码如下(第6行强制转换,明确可以肯定此处Object肯定是 UserInfoDTO): protected static UserInfoDTO...接受ApplicationStartingEvent广播然后进行一系列初始化操作并实时监听 首先RestartApplicationListener接受ApplicationStartingEvent事件广播并判断...,在启动fileSystemWatcher的时候会在fileSystemWatcher上注册一个ClassPathFileChangeListener监听用于响应监听的目录发生变动,具体代码如下: @...} } 之前注册的ClassPathFileChangeListener监听器收到通知后会发布一个ClassPathChangedEvent(ApplicationEvent)事件...null) { this.fileSystemWatcherToStop.stop(); } } 上边发布的ClassPathChangedEvent事件会被

    1.5K30

    浅析 .Net Core中Json配置的自动更新

    Pre 很早在看 Jesse 的Asp.net Core快速入门的课程的时候就了解到了在Asp .net core中,如果添加的Json配置被更改了,是支持自动重载配置的,作为一名有着严重"造轮子"情节的程序员...吃了, 那我们这里也一样,一旦有FileProvider.Watch返回了什么东西,就会发生Load()事件来重新加载数据. ?与?...可以看到,一旦在监听的目录下创建文件,立即触发了执行回调函数,但是如果我们继续手动地更改(复制)监听目录中的文件,回调函数就不再执行了....,FileSystemWatcher是system.io下的底层IO类,在构造函数中给这个Watcher的Created,Changed,Renamed,Deleted注册EventHandler事件,...public PhysicalFilesWatcher(string root,FileSystemWatcher fileSystemWatcher,bool pollForChanges,ExclusionFilters

    1.2K20
    领券